Можно ли заменить системный диалог открытия файла? - PullRequest
5 голосов
/ 09 июня 2009

Я хочу заменить стандартный системный диалог открытия файла на тот, который я написал, это означает, что независимо от того, в каких программах вы открываете файл, мой диалог будет отображаться вместо стандартного, возможно ли это?

Кажется, что такого API не предусмотрено для этого, возможно ли использовать какую-то технику перехвата, но она должна быть надежной и не должна рассматриваться антивирусными инструментами как шпионское ПО?

есть еще варианты?

Если это невозможно, возможно ли добавить к пробелу или панели инструментов в стандартном диалоговом окне открытия файла кнопку, которая вызывает мое диалоговое окно, которое позволяет пользователям выбрать файл и, в свою очередь, возвращает путь выбранного файла к Поле ввода имени файла стандартного диалога?

Будем благодарны за любые хиты, ссылки и примеры кода.

Ответы [ 2 ]

2 голосов
/ 11 июня 2009

Начиная с Vista, диалоговые окна FileOpen / FileSave теперь являются " Диалогами общих элементов ", из которых IFileOpenDialog и IFileSaveDialog являются двумя опубликованными реализациями.

Поскольку это всего лишь COM-объекты с известными идентификаторами CLSID, вы можете просто заменить их, повторно зарегистрировавшись с использованием их идентификаторов CLSID. Никогда не пытался что-то подобное, может отключить все виды сигналов тревоги.

Диалоговые окна файлов до Vista могут быть подключены в процессе , но я никогда не сталкивался с глобальными перехватчиками или их аналогами.

1 голос
/ 27 июня 2014

Если вы копируете файл / папку в поле имени диалогового окна, оно обычно в любом случае вставляет полный путь.

Например, если вы открыли обе программы, вызывающие стандартное диалоговое окно открытия / сохранения, а также открыли окно с файлом или путем, с которым хотите работать (открыть из / сохранить в), вы можете просто скопировать файл / папка из окна проводника, а затем вставьте в поле имени файла диалогового окна, и он вставит полный путь к файлу / папке. Пользовательский скрипт не требуется!

В качестве альтернативы, для тех программ, которые используют настраиваемые диалоговые окна, где этот шаг не выполняется, скопируйте тот же файл / папку в окне в адресную строку того же окна (при условии, что он видим). Это вставит полный путь, который вы можете скопировать снова, а затем вставьте этот полный путь в пользовательское диалоговое окно. Я часто использую это при создании гиперссылок Office (Ctrl + K), потому что диалоговое окно Вставить гиперссылку не работает для первого метода.

Вы также можете использовать аналогичные методы, но вставить в поля адресной строки, и это работает.

...