Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 ... 9 ОтправитьПечать
Очень популярная тема (более 25 ответов) Перехват диалога открытия/сохранения файла (число прочтений - 83703 )
metaeditor
1c++ power user
Отсутствует


are you nuts?

Сообщений: 564
Зарегистрирован: 04. Июля 2006
Пол: Мужской
Re: Перехват диалога открытия/сохранения файла
Ответ #30 - 30. Июля 2009 :: 10:01
Печать  
т.е ты хочеш чтобы допустим изначально открывался КаталогПользователя(), а потом, если выбрали файл в "КаталогПользователя()\Подкаталог" то в следующий раз чтобы диалог открылся в этом самом "Подкаталог"  ?
  

Регистр.EAX.СводныйОстаток()
Наверх
 
IP записан
 
infossa
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 53
Зарегистрирован: 29. Мая 2006
Re: Перехват диалога открытия/сохранения файла
Ответ #31 - 31. Июля 2009 :: 05:47
Печать  
Цитата:
т.е ты хочеш чтобы допустим изначально открывался КаталогПользователя(), а потом, если выбрали файл в "КаталогПользователя()\Подкаталог" то в следующий раз чтобы диалог открылся в этом самом "Подкаталог"  ?


Да, если выбрали или сохранили файл в  УстановитьНачальныйКаталог()\Подкаталог , то открывался "Подкаталог" и пользователь при желании мог двигаться до УстановитьНачальныйКаталог().
Можно добавить какой-нибудь метод , н-р, СохранятьПоследнийКаталог(1). Если этот метод не установлен , то работает по-старому.  
А в остальном все устраивает. Еще раз спасибо.
  
Наверх
 
IP записан
 
admin spb
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 150
Зарегистрирован: 26. Апреля 2007
Пол: Мужской
Re: Перехват диалога открытия/сохранения файла
Ответ #32 - 10. Августа 2009 :: 07:53
Печать  
Используйте программу WinLock - очень хорошо работает для защиты компьютера.
Если кому надо, могу выслать Вам на е-майл программу  с ключиком. (когда то купил ключ за 5 $)  =)
Пишите admin@te.spb.su
  
Наверх
 
IP записан
 
metaeditor
1c++ power user
Отсутствует


are you nuts?

Сообщений: 564
Зарегистрирован: 04. Июля 2006
Пол: Мужской
Re: Перехват диалога открытия/сохранения файла
Ответ #33 - 10. Августа 2009 :: 12:30
Печать  
infossa
добавил метод
менеджерДиалогов.ЗапоминатьПоследнийКаталог(1); //запоминать последний открытый каталог, при следующем открытии он будет установлен как начальный
« Последняя редакция: 12. Августа 2009 :: 13:01 - metaeditor »  

Регистр.EAX.СводныйОстаток()
Наверх
 
IP записан
 
infossa
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 53
Зарегистрирован: 29. Мая 2006
Re: Перехват диалога открытия/сохранения файла
Ответ #34 - 12. Августа 2009 :: 11:53
Печать  
metaeditor писал(а) 10. Августа 2009 :: 12:30:
infossa
добавил метод
менеджерДиалогов.ЗапоминатьПоследнийКаталог(1); //запоминать последний открытый каталог, при следующем открытии он будет установлен как начальный


Работает так как нужно.
Но , при использовании метода менеджерДиалогов.ЗапоминатьПоследнийКаталог(1); при сохранении или открытии файла вылетает вероятно окно для отладки "CDN_FILEOK".
Если можно, то лучше это убрать.
А так, все замечательно.
Еще раз большое спасибо за компоненту!
  
Наверх
 
IP записан
 
metaeditor
1c++ power user
Отсутствует


are you nuts?

Сообщений: 564
Зарегистрирован: 04. Июля 2006
Пол: Мужской
Re: Перехват диалога открытия/сохранения файла
Ответ #35 - 12. Августа 2009 :: 13:03
Печать  
да, точно, отладочное сообщение забыл убрать

прикрепленный файл находится ниже
« Последняя редакция: 25. Августа 2009 :: 13:03 - metaeditor »  

Регистр.EAX.СводныйОстаток()
Наверх
 
IP записан
 
infossa
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 53
Зарегистрирован: 29. Мая 2006
Re: Перехват диалога открытия/сохранения файла
Ответ #36 - 12. Августа 2009 :: 13:24
Печать  
Потестировал я компоненту , выявил вот еще что.

Юзеры для работы используют несколько каталогов (2,3).
При
Код
Выбрать все
менеджерДиалогов.УстановитьНачальныйКаталог("N:\Каталог1\");
менеджерДиалогов.ЗапоминатьПоследнийКаталог(1);
 

все работает нормально.

Если я затем хочу поменять каталог, т.е.
Код
Выбрать все
менеджерДиалогов.УстановитьНачальныйКаталог("R:\Каталог2\"); 


то открывается "старый" сохраненный каталог.
И естественно при попытки выйти вверх по иерархии - нет доступа.

Хотелка.
Хотелось бы, чтобы при сохранении истории учитывался каталог из метода менеджерДиалогов.УстановитьНачальныйКаталог("R:\Каталог2\"); , т.е. у каждого "начального" каталога была бы своя история.
  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Еще одна хотелка
Ответ #37 - 12. Августа 2009 :: 14:45
Печать  
Потестировал - понравилось! Задумка супер! Но как обычно - у каждого свои запросы и задачи, поэтому каждому чего-то не хватает....
Можно и я со своей хотелкой влезу? Улыбка

Я "блокирую" пользователя в его рабочем каталоге КаталогПользователя(), чтобы он не гадил на серваке где попало. Но вот как ему попасть на свою машину, с которой он ходит по RDP?
У меня возникла идея - создать шорткат в КаталогПользователя() на \\tsclient\C$ и пущай работает. Но компонента не пускает по шорткату .... что вполне логично Улыбка Автор хорошо позакрывал дырки Улыбка

Так вот хотелось-бы что-то типа
Код
Выбрать все
менеджерДиалогов.ЗапретитьФайловыеОперации(1)
МенеджерДиалогов.ЗапретитьИзменениеТекущегоКаталога(3) 



Пускать ниже и по линкам/шорткатам. По идее первая команда не даст слишком умному юзверю создать свои линки. То что я создал при старте 1С пусть тем и пользуется.....
А вторая чтобы пускала туда куда я разрешил
Очень хочется такой функционал ... Если это конечно не сильно противоречит логике программы ...

Ну и в любом случае большое спасибо автору за полезную компоненту!
  
Наверх
ICQ  
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Надежно зафиксированный пациент в анастезии на нуждается :)
Ответ #38 - 13. Августа 2009 :: 08:43
Печать  
Вот такую вот процедуру написал с использованием компоненты - может кому пригодится
Если пользователи работают с базой через терминал (RDP), запускаешь при начале работы системы и дурных вопросов от юзверей становится намного меньше Улыбка

Код
Выбрать все
// Создает в КаталогеПользователя подкаталог "Мой компьютер" а в нем ярлыки на диски того компьютера
// за которым сидит юзверь. Каталогом по умолчанию для файловых операция выставляется КаталогПользователя
// Чтобы юзверь не ныл "А как мне сохранить отчет на мой диск "С"? А через сетевое окружение это слишком долго! А я не запомню!" и т.п. хрень
Процедура СоздатьЯрлыкиНаСвоиДиски()
	Перем RDPsession, ClientName;

	БазаНаСетевомДиске = 0;
	рег = СоздатьОбъект( "РаботаСРегистромWin" );
	// имя терминальной сессии (если в терминале) или "Console"
	рег.ОткрытьКлюч( "HKEY_CURRENT_USER", "Volatile Environment", "KEY_QUERY_VALUE" );
	рег.ЗапроситьЗначение("SESSIONNAME", RDPsession);
	Если (ПустоеЗначение(RDPsession) = 1) ИЛИ (RDPsession = "Console") Тогда
		// Т.е. мы работаем не через терминальную сессию, а запускаем 1С на своем компе - определяем имя компютера на которм сидим
		рег.ОткрытьКлюч( "HKEY_LOCAL_MACHINE", "SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName", "KEY_QUERY_VALUE" );
		рег.ЗапроситьЗначение( "ComputerName", ClientName );
		// Теперь проверяем где-же у нас база - на локальном или на сетевом ресурсе
		Если Лев(КаталогИБ(), 1) <> "\" Тогда
			WshNetwork=СоздатьОбъект("WScript.Network");
			Drives=WshNetwork.EnumNetworkDrives();
			ы=0;
			Пока ы <= Drives.Count()-1 Цикл
				Если Лев(КаталогИБ(), 2) = Drives.Item(ы) Тогда
					БазаНаСетевомДиске = 1;
				    //Сообщить(Drives.Item(ы)+" - "+Drives.Item(ы+1));
				КонецЕсли;
			    ы=ы+2;
			КонецЦикла;
		Иначе
			БазаНаСетевомДиске = 1;
			КонецЕсли;
	Иначе
		// Работаем через терминальную сессию - определяем имя компьютера за которым сидим следующим образом
		рег.ОткрытьКлюч( "HKEY_CURRENT_USER", "Volatile Environment", "KEY_QUERY_VALUE" );
		рег.ЗапроситьЗначение( "CLIENTNAME", ClientName);
	КонецЕсли;

	Если (БазаНаСетевомДиске = 1) ИЛИ ((ПустаяСтрока(RDPsession) = 0) И (RDPsession <> "Console")) Тогда
		// Если работаем через терминал или каталог БД находится на сетевом ресурсе
		КаталогДляЯрлыков = КаталогПользователя() + "Мой компьютер";
		ФСР = СоздатьОбъект("ФСРасш");
		Если ФСР.СуществуетФайл(КаталогДляЯрлыков) = 1 Тогда
			Если ФСР.ЭтоКаталог(КаталогДляЯрлыков) = 1 Тогда
				FSO=СоздатьОбъект("Scripting.FileSystemObject");
				FSO.DeleteFolder(КаталогДляЯрлыков,0);
			Иначе
				ФСР.УдалитьФайл(КаталогДляЯрлыков);
			КонецЕсли;
		КонецЕсли;
		Если ФСР.СоздатьКаталог(КаталогДляЯрлыков) = 1 Тогда
			WshShell=СоздатьОбъект("WScript.Shell");
			WshShortcut=WshShell.CreateShortcut(КаталогДляЯрлыков + "\Disk C.lnk");
			//WshShortcut.Arguments="C:\autoexec.bat";
			WshShortcut.Description="Диск ""С"" моего комьютера";
			//WshShortcut.HotKey="CTRL+ALT+F";
			WshShortcut.IconLocation="shell32.dll, 5";
			WshShortcut.TargetPath="\\"+ClientName+"\C$";
			WshShortcut.WindowStyle=1;
			WshShortcut.WorkingDirectory="C:\";
			//Сообщить(WshShortcut.FullName);
			WshShortcut.Save();
		КонецЕсли;
		МенеджерДиалогов = СоздатьОбъектВК("OpenFileDialogsManager.dll", "AddIn.OpenFileDialogsManager");
		Если МенеджерДиалогов <> 0 Тогда
			//МенеджерДиалогов.БлокироватьДиалоги(1)
			МенеджерДиалогов.УстановитьНачальныйКаталог(КаталогПользователя());
			Если НазваниеНабораПрав() <> АдминистративныйНаборПрав Тогда
				// А теперь надежно зафиксируем пациента в его рабочем каталоге, чтоб не лазил по серверу куда попало :)
		    	МенеджерДиалогов.ЗапретитьФайловыеОперации(1); //отключает в диалоге операции копирования, удаления, перемещения, контекстное меню
		    	//МенеджерДиалогов.ЗапретитьИзменениеТекущегоКаталога(2); // Запрещаем переходить по дереву каталогов вверх от тек. каталога (вниз можно)
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры
 



Вот еще бы ту возможность о которой я писал в предыдущем посте, тогда можно было-бы разблокировать строку
МенеджерДиалогов.ЗапретитьИзменениеТекущегоКаталога(3) и было-бы полное счастье для админа. Юзеры сидят себе тихонько в своих каталогах и не лазят куда не просят Улыбка
  
Наверх
ICQ  
IP записан
 
OstapBender
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 20
Зарегистрирован: 07. Мая 2008
Re: Перехват диалога открытия/сохранения файла
Ответ #39 - 13. Августа 2009 :: 14:31
Печать  
А не затруднит объяснить, что за объект такой "ФСРасш"?
  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Перехват диалога открытия/сохранения файла
Ответ #40 - 13. Августа 2009 :: 19:15
Печать  
OstapBender писал(а) 13. Августа 2009 :: 14:31:
А не затруднит объяснить, что за объект такой "ФСРасш"?


Дико извиняюсь! Это мой класс основанный на ФС но несколько расширенный Улыбка

Вот определение
Код
Выбрать все
//#if ! _class_ФСРасш
класс ФСРасш = ExFileSystem.ert  : ФС
{
//#define _class_ФСРасш
	Строка ДобавитьОбратныйСлеш(Знач Строка ИмяФайла);
	Строка УдалитьОбратныйСлеш(Знач Строка ИмяФайла);
	Строка ПолучитьИмяФайла(Знач Строка ИмяФайла);
	Строка ПолучитьПутьКФайлу(Знач Строка ИмяФайла);
	Строка ПолучитьРасширениеФайла(Знач Строка ИмяФайла);
	СписокЗначений ПолучитьВсеФайлы(Знач Строка Маска, Знач Число ПолнИмя = 1);  
	Число ЭтоКаталог(Знач Строка Имя);
	Число СоздатьКаталог(Знач Строка ИмяКаталога, Знач Число СообщатьОбОшибке = 1);
};
//#endif
 

  
Наверх
ICQ  
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Перехват диалога открытия/сохранения файла
Ответ #41 - 13. Августа 2009 :: 19:16
Печать  
О! Реализацию забыл Печаль
  

ExFileSystem.ert ( 41 KB | Загрузки )
Наверх
ICQ  
IP записан
 
OstapBender
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 20
Зарегистрирован: 07. Мая 2008
Re: Перехват диалога открытия/сохранения файла
Ответ #42 - 14. Августа 2009 :: 06:15
Печать  
Спасибо, за столь быструю реакцию и интересное решение - тоже были с этим заморочки.
  
Наверх
 
IP записан
 
OstapBender
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 20
Зарегистрирован: 07. Мая 2008
Re: Перехват диалога открытия/сохранения файла
Ответ #43 - 14. Августа 2009 :: 07:24
Печать  
Avgreen, подскажи пожалуйста по процедуре. Какого-то хрена на некоторых машинах ругается на строку WshShortcut=WshShell.CreateShortcut(КаталогДляЯрлыков + "\Disk C.lnk");
"Поле агрегатного объекта не обнаружено (CreateShortcut)". В скриптовых языках не волоку  Плачущий
  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Перехват диалога открытия/сохранения файла
Ответ #44 - 14. Августа 2009 :: 11:59
Печать  
OstapBender писал(а) 14. Августа 2009 :: 07:24:
Avgreen, подскажи пожалуйста по процедуре. Какого-то хрена на некоторых машинах ругается на строку WshShortcut=WshShell.CreateShortcut(КаталогДляЯрлыков + "\Disk C.lnk");
"Поле агрегатного объекта не обнаружено (CreateShortcut)". В скриптовых языках не волоку  Плачущий


Да я честно говоря тоже не очень Печаль Этот кусок я писал методом "копипаста" Улыбка
Такое впечатление что объект не создался, хотя почему не на
Код
Выбрать все
WshShell=СоздатьОбъект("WScript.Shell");
 


заругалось ...... ну может быть конечно оно исключения не выдало а просто "0" вернуло. Попробуй спроси ТипЗначенияСтр(WshShell)

А операционки одинаковые на всех машинах?

Вот почитай http://www.kuban.ru/forum_new/forum9/arhiv/273795.html может поможет
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 ... 9
ОтправитьПечать