Переключение на Главную Страницу Страницы: [1] 2 3 ... 9 ОтправитьПечать
Очень популярная тема (более 25 ответов) Перехват диалога открытия/сохранения файла (число прочтений - 83504 )
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Перехват диалога открытия/сохранения файла
19. Мая 2009 :: 11:29
Печать  
Возможно ли средствами ФормЕкс или 1С++ перехватывать/запрещать открытие диалога сохранения/открытия файла?
Не хочу, чтобы на терминальном сервере люди таким образом рыскали по диску и копировали/стирали файлы.
« Последняя редакция: 25. Июня 2009 :: 09:52 - blindvic »  
Наверх
 
IP записан
 
metaeditor
1c++ power user
Отсутствует


are you nuts?

Сообщений: 564
Зарегистрирован: 04. Июля 2006
Пол: Мужской
Re: Перехватить диалог открытия/сохранения файла
Ответ #1 - 19. Мая 2009 :: 14:18
Печать  
Попиарю свою разработку )
http://www.infostart.ru/projects/456/
в разделе "Настройка" в ридми файле описано как блокировать.
Также можно не просто заблокировать диалоги, а сделать их "только чтение", чтобы отчеты можно было например сохранять.

добавлено позже
здесь будет постоянная ссылка и описание компоненты
Код
Выбрать все
ОПИСАНИЕ:
	Компонента позволяет управлять диалогами открытия/сохранения файлов.

ИСПОЛЬЗОВАНИЕ:
	ЗагрузитьВнешнююКомпоненту("OpenFileDialogsManager.dll");
	менеджерДиалогов = СоздатьОбъект("AddIn.OpenFileDialogsManager");
	менеджерДиалогов.УстановитьНачальныйКаталог("c:\111\"); //диалог будет открываться в указанном каталоге
	менеджерДиалогов.БлокироватьДиалоги(1); //запретить открытие любых диалогов сохранения/выбора файла
	менеджерДиалогов.ЗапретитьФайловыеОперации(1); //отключает в диалоге операции копирования, удаления, перемещения, контекстное меню
	менеджерДиалогов.ЗапретитьВставкуОбъектовВТаблицы(1); //отключает возможность вставки OLE-объектов в таблицы

	//запретить в диалоге переход в другие папки
	//если параметр равен 1, нельзя перейти ни в какой другой каталог
	//если параметр равен 2, тогда можно дополнительно переходить вниз по дереву текущего каталога
	//если параметр равен 3, тогда аналогично 2, плюс разрешается доступ к сетевым папкам и дискам
	менеджерДиалогов.ЗапретитьИзменениеТекущегоКаталога(1);

	менеджерДиалогов.ПоказыватьПанельНавигации(1); //отображать слева диалога панель с кнопками
	менеджерДиалогов.УстановитьФильтр("Файлы Excel (*.xls)|*.xls|Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*");
	менеджерДиалогов.УстановитьНомерФильтра(3);
	менеджерДиалогов.ЗапоминатьПоследнийКаталог(1); //запоминать последний открытый каталог, при следующем открытии он будет установлен как начальный


Предопределенные события глобального модуля:

//Вызывается при открытии диалога выбора файла.
//	РежимДиалога - режим открытия диалога. 0 - для открытия, 1 - для сохранения файла.
//Для запрета открытия диалога данная процедура должна вернуть 0, для разрешения 1
Функция ДиалогВыбораФайлаПриОткрытии(РежимДиалога)
КонецФункции

//Вызывается при выборе файла в диалоге (нажатии на ОК).
//	ПолноеИмяФайла - полное имя выбираемого файла
//	РежимДиалога - режим открытия диалога. 0 - для открытия, 1 - для сохранения файла.
Процедура ДиалогВыбораФайлаПриВыборе(ПолноеИмяФайла, РежимДиалога)
КонецПроцедуры 



« Последняя редакция: 24. Октября 2014 :: 02:03 - metaeditor »  

OpenFileDialogsManager_1011_001.rar ( 23 KB | Загрузки )

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



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Перехватить диалог открытия/сохранения файла
Ответ #2 - 19. Мая 2009 :: 15:31
Печать  
Хорошая штука, по ходу. Еще разбираюсь.
Насторйка только интерактивно (частичная) или через реестр?
Я хочу при запуске в режиме Предприятия установить парАметры доступа. Некторым пользователям все, некоторым - ничего. Если делать через реестр - неудобно и требуется перезагрузка программы. Так?
  
Наверх
 
IP записан
 
metaeditor
1c++ power user
Отсутствует


are you nuts?

Сообщений: 564
Зарегистрирован: 04. Июля 2006
Пол: Мужской
Re: Перехватить диалог открытия/сохранения файла
Ответ #3 - 20. Мая 2009 :: 07:55
Печать  
Настройка блокировки только через реестр, остальное через диалог. Неудобно, да, потомучто это не внешняя компонента.
В реестр можно писАть через WSH.
Сначала настраиваеш реестр потом запускаеш программу, перезапуск ненужен.
  

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



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Перехватить диалог открытия/сохранения файла
Ответ #4 - 20. Мая 2009 :: 14:22
Печать  
Не подходит - слишком заморочно. Данные о правах пользователя - в самой 1с. Кроме того в терминале запрещен запуск всего остального.
Код открыт? Реально переделать под компоненту?
  
Наверх
 
IP записан
 
metaeditor
1c++ power user
Отсутствует


are you nuts?

Сообщений: 564
Зарегистрирован: 04. Июля 2006
Пол: Мужской
Re: Перехватить диалог открытия/сохранения файла
Ответ #5 - 21. Мая 2009 :: 11:02
Печать  
Не вижу проблемы. В ПриНачалеРаботыСистемы читаеш права пользователя, в соответствии с ними через 1cpp или WSH пишеш в реестр настроечные ключи и запускаеш программу.

Второй вариант. Вместо запуска программы загружаеш только fdsubst.dll весь функционал программы в ней. В дистрибутиве в папке "Внешняя компонента" описано как это сделать.

Ну и третий вариан, попросить разработчиков 1спп или формекса добавить в компоненту заглушки на api ф-ии GetOpenFileNameA/W
GetSaveFileNameA/W, это делов на 5 мин.
  

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



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Перехватить диалог открытия/сохранения файла
Ответ #6 - 21. Мая 2009 :: 18:52
Печать  
metaeditor писал(а) 21. Мая 2009 :: 11:02:
Ну и третий вариан, попросить разработчиков 1спп или формекса добавить в компоненту заглушки на api ф-ии GetOpenFileNameA/W
GetSaveFileNameA/W, это делов на 5 мин.

А сработает?
О, разработчкики 1спп!
Не могли бы вы выделить 5 минут и добавить ф-ии для работы с GetOpenFileNameA/W и GetSaveFileNameA/W?
  
Наверх
 
IP записан
 
KonstSV
Junior Member
**
Отсутствует



Сообщений: 39
Местоположение: Москва
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Перехватить диалог открытия/сохранения файла
Ответ #7 - 25. Мая 2009 :: 07:13
Печать  
Можно проще.

Вариант 1. С помощью объекта "Окна" из FormEx можно сделать невидимым всё меню "Файл". Нет пункта "Открыть файл" - нет проблемы.

Вариант 2. Используем внешнюю компоненту RWidjets.dll. С её помощью в процедуре "ПриПолученииКоманды" отлавливаем команду на
открытие файла и, либо блокируем её, либо взамен выполняем какие-либо свои действия.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Перехватить диалог открытия/сохранения файла
Ответ #8 - 25. Мая 2009 :: 12:19
Печать  
blindvic писал(а) 21. Мая 2009 :: 18:52:
metaeditor писал(а) 21. Мая 2009 :: 11:02:
Ну и третий вариан, попросить разработчиков 1спп или формекса добавить в компоненту заглушки на api ф-ии GetOpenFileNameA/W
GetSaveFileNameA/W, это делов на 5 мин.

А сработает?
О, разработчкики 1спп!
Не могли бы вы выделить 5 минут и добавить ф-ии для работы с GetOpenFileNameA/W и GetSaveFileNameA/W?

Почему именно в 1cpp?
Это задача никак не связана с функционалом 1cpp -> лучше вынести в отдельную компоненту без регистрации в реестре.
Плюс здесь в том, что ее можно будет разрабатывать и поддерживать самостоятельно.

По теме: еще можно использовать групповые политики для ограничения доступа к дискам сервера.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Перехватить диалог открытия/сохранения файла
Ответ #9 - 26. Мая 2009 :: 12:35
Печать  
KonstSV писал(а) 25. Мая 2009 :: 07:13:
Вариант 1. С помощью объекта "Окна" из FormEx можно сделать невидимым всё меню "Файл". Нет пункта "Открыть файл" - нет проблемы.

И ктрл+О не сработает?

В идеале хотелось бы дать доступ к определенной папке и октлючить контекстные файловые операции.
В принципе FDSubst1C то, что нужно, но управление через реестр заморочно, и это не чистая внешняя компонента.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Перехватить диалог открытия/сохранения файла
Ответ #10 - 26. Мая 2009 :: 13:16
Печать  
А в чем заморочка управления через реестр? При старте системы пиши текущему пользователи те права, которые он заслужил.
Всё равно ты будешь куда-то записывать/устанавливать эти данные. Какая разница куда?
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Перехватить диалог открытия/сохранения файла
Ответ #11 - 26. Мая 2009 :: 13:24
Печать  
Ок. Будем думать.
Значит, при начале работы системы изенить реестр с помощью 1с++, потом загрузить эту самую компоненту.

ЗЫ А исходники FDSubst1C открыты?
  
Наверх
 
IP записан
 
metaeditor
1c++ power user
Отсутствует


are you nuts?

Сообщений: 564
Зарегистрирован: 04. Июля 2006
Пол: Мужской
Re: Перехватить диалог открытия/сохранения файла
Ответ #12 - 27. Мая 2009 :: 09:40
Печать  
blindvic писал(а) 26. Мая 2009 :: 13:24:
Ок. Будем думать.
Значит, при начале работы системы изенить реестр с помощью 1с++, потом загрузить эту самую компоненту.
ЗЫ А исходники FDSubst1C открыты?


нет, исходников я не открывал... если надо, могу показать, да только толку с этого, там в трех тыщах паскалевского кода на чистом winapi я и сам уже путаюсь Улыбка

Если тебе нужна просто функция блокировки диалогов, давай я сделаю обычную ВК? Это несложно.
  

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



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: Перехватить диалог открытия/сохранения файла
Ответ #13 - 27. Мая 2009 :: 10:11
Печать  
Я был бы очень благодарен!
1. Без регистрации в реестре под админом
2. Возможность включать/отключать блокировку открытия диалогов открытия/сохранения файла.
2. Возможность отключить контекстные файловые операции (копировать, вставить, удалить)
3. Возможность ограничения пользователя одной директорией, либо дать доступ любым кроме одной. (Это, наверное, сложнее)
  
Наверх
 
IP записан
 
metaeditor
1c++ power user
Отсутствует


are you nuts?

Сообщений: 564
Зарегистрирован: 04. Июля 2006
Пол: Мужской
Re: Перехватить диалог открытия/сохранения файла
Ответ #14 - 01. Июня 2009 :: 11:06
Печать  
Вот компонента.
Функция отключения контекстного меню будет позже.

Код
Выбрать все
ЗагрузитьВнешнююКомпоненту("OpenFileDialogsManager.dll")
менеджерДиалогов = СоздатьОбъект("AddIn.OpenFileDialogsManager");
менеджерДиалогов.УстановитьНачальныйКаталог("c:\111\"); //диалог будет открываться в указанном каталоге
менеджерДиалогов.БлокироватьДиалоги(1); //1 - включить, 0 - отключить блокировку 



файл находится ниже
« Последняя редакция: 06. Июня 2009 :: 10:36 - metaeditor »  

Регистр.EAX.СводныйОстаток()
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 ... 9
ОтправитьПечать