Можно ли зацепить общие диалоги windows 7 и 8

Я пытаюсь заменить все вызовы Windows Common (Open/Save) filedialog своим собственным диалоговым окном. Из того, что я прочитал до сих пор, я мог бы сделать это с помощью перехвата вызовов, либо написав свой собственный, либо используя библиотеки, такие как detours или easyhook. Но кто-то мне недавно сказал, что такой подход возможен только до Vista, из-за изменения архитектуры сессий и в Win 7/8 такой переход сделать невозможно. Теперь я не тот парень, который любит слово «невозможно» :) Так что, если у вас есть какие-либо советы по этому вопросу, пожалуйста, скажите, и я буду признателен за вашу доброту.

Для того, что мне делать, мое приложение будет запускаться пользователем, оно будет находиться в трее, и когда пользователь вызывает диалоговое окно «Открыть/Сохранить» из любого приложения, оно должно заменить общий диалог по умолчанию на настраиваемый диалог.


person Prad Lal    schedule 30.07.2013    source источник
comment
Пожалуйста, сделайте это необязательным. По крайней мере, некоторым из ваших пользователей больше понравится версия для Windows.   -  person Ben Voigt    schedule 30.07.2013
comment
Вы когда-нибудь занимались крючком раньше?   -  person Ben Voigt    schedule 30.07.2013
comment
Это не поддерживается. Не говорю, что это невозможно, просто это не поддерживается. Вы также вступаете в опасный мир совместимости приложений, поскольку приложения делают всевозможные сумасшедшие вещи с обычными диалогами. Например, есть все сообщения CDM, уведомления CDN, шаблоны настройки...   -  person Raymond Chen    schedule 30.07.2013
comment
О, боже... замена проводника может быть тривиальной задачей по сравнению с подключением обычных диалогов.   -  person Nik Bougalis    schedule 30.07.2013
comment
@BenVoigt: Спасибо за ваш вклад. И нет, у меня нет опыта работы с крючками.   -  person Prad Lal    schedule 31.07.2013
comment
@RaymonChen: я ваш поклонник, читаю ваш блог :) Я понимаю, что разные приложения настраивают общие диалоги по-разному, могу ли я спросить, можно ли посмотреть запрос на настройку и сделать то же самое с настраиваемый диалог, который я хочу показать. Еще раз, очень рад видеть ваш ответ.   -  person Prad Lal    schedule 31.07.2013


Ответы (1)


Новые диалоговые окна общих элементов реализованы как стандартные COM. объекты, поэтому вы можете просто реализовать свою собственную DLL, которая предоставляет те же COM-интерфейсы (IFileOpenDialog, IFileSaveDialog и т. д.), а затем переопределить регистрацию по умолчанию в реестре своими собственными. Таким образом, каждое приложение, использующее диалоги, будет загружать вашу DLL вместо библиотеки Microsoft.

person Remy Lebeau    schedule 30.07.2013
comment
Могу ли я спросить, есть ли у этого подхода какие-либо отсроченные осложнения. Например, когда пользователь устанавливает более новые программы или когда ОС имеет обновление? - person Prad Lal; 31.07.2013
comment
Приложения никак на это не повлияют, но обновление/восстановление ОС может восстановить регистрацию по умолчанию. - person Remy Lebeau; 31.07.2013