Могу ли я использовать ChangeWindowMessageFilter для получения событий DocumentComplete из IE защищенного режима? - PullRequest
0 голосов
/ 07 июня 2009

В моем приложении я хочу открыть новое окно IE, затем получить и обработать DocumentComplete и NavigateComplete2 события, сгенерированные из нового открытого IE. В XP все отлично работает. В Vista новый IE работает в защищенном режиме, поэтому мое приложение не может получить событие DocumentCompelte от IE.

Я не хочу менять какой-либо уровень безопасности, например, отключать IE в защищенном режиме или снижать целостность моего приложения. Интересно, могу ли я использовать ChangeWindowsMessageFilter для получения событий DocumentComplete и NavigateComplete2 из IE защищенного режима? Мой код выглядит так:

   ChangeWindowMessageFilter(DISPID_DOCUMENTCOMPELTE, MSGFLT_ADD );
   ChangeWindowMessageFilter(DISPID_NAVIGATECOMPLETE2, MSGFLT_ADD );

Спасибо!

1 Ответ

1 голос
/ 07 июня 2009

Нет. ChangeWindowMessageFilter () работает только для оконных сообщений (например, WM_CREATE).

«Сообщения» DWebBrowserEvents2 () являются событиями Dispinterface, вызываемыми через COM, и не имеют ничего общего с сообщениями окна.

Edit:

Из документации :

Если ваше приложение запускает Интернет Исследователь, использующий CoCreateInstance и вам нужно продолжать контролировать навигации после запуска IE, вы можно использовать IWebBrowser2 для навигации Internet Explorer программно. Вы можете только продолжать контролировать навигация после запуска IE, если ваше приложение имеет то же самое уровень целостности как процесс IE запущен. После того, как ваше заявление переходит к URL в другом целостность процесса IE, вы не можете выполнить дополнительные навигации. Вы должен сделать кадр IE видимым после навигация.

Так что я подозреваю, что вы стали жертвой подобной проблемы. Вам нужно либо запустить процесс как процесс с низким уровнем целостности, либо запустить браузер с более высоким уровнем целостности. См. Этот документ для получения подробной информации о том, как контролировать, как ваше приложение запускается (манифест).

Если вам не нужен полноценный браузер, рассмотрите CoCreateInstance(CLSID_WebBrowser).

...