0

私のアプリでは、新しい IE ウィンドウを開き、新しく開いた IE から発生したDocumentCompleteおよびNavigateComplete2イベントを受け取って処理したいと考えています。XP では、すべて正常に動作します。Vista では、新しい IE が保護モードで実行されているため、アプリは IE から DocumentCompelte イベントを受け取ることができません。

IE を保護モードで開いたり、アプリの整合性を下げたりするなど、セキュリティ レベルを変更したくありません。ChangeWindowsMessageFilter を使用して、プロテクト モード IE から DocumentComplete および NavigateComplete2 イベントを受信できるのでしょうか? 私のコードは次のようなものです:

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

ありがとう!

4

1 に答える 1

1

いいえ。ChangeWindowMessageFilter() は、ウィンドウ メッセージ (WM_CREATE など) でのみ機能します。

DWebBrowserEvents2() の「メッセージ」は、COM 経由で呼び出される Dispinterface イベントであり、ウィンドウ メッセージとは何の関係もありません。

編集:

ドキュメントから:

アプリケーションが CoCreateInstance を使用して Internet Explorer を起動し、IE の起動後も引き続きナビゲーションを制御する必要がある場合は、IWebBrowser2 を使用して Internet Explorer をプログラムでナビゲートできます。アプリケーションが起動された IE プロセスと同じ整合性レベルを持っている場合にのみ、IE が起動された後にナビゲーションを制御し続けることができます。アプリケーションが別の整合性 IE プロセスで URL に移動すると、追加のナビゲーションを実行できなくなります。ナビゲーション後に IE フレームを表示する必要があります。

したがって、同様の問題の犠牲になっているのではないかと思います。プロセスを整合性の低いプロセスとして実行するか、Web ブラウザをより高い整合性レベルで実行する必要があります。アプリの起動方法 (マニフェスト) を制御する方法の詳細については、このドキュメントを参照してください。

完全なブラウザが実際に必要ない場合は、 を検討してCoCreateInstance(CLSID_WebBrowser)ください。

于 2009-06-07T05:32:17.157 に答える