3

各ブラウザウィンドウからドキュメントを評価し、それに応じて行動する必要があります。IwebBrowser2を取得するためにshellwindowsを使用しています。次に、必要なすべてのドキュメントプロパティにアクセスできます。すなわち..。

ShellWindows:= TshellWindows.Create(nil);

..。

ShellWindowDisp:= ShellWindows.Item(Count); //forループ

..。

ShellWindowDisp.QueryInterface(iWebBrowser2、WebBrowser);

等....

この方法は、私が知る限りうまく機能します。ただし、ドキュメントの1つが変更された場合、私のコードはそれを認識しません。そのため、OnDocumentCompleteなどのイベントについてExplorerを監視する必要があります。上記のコードをタイマーにダンプしてプロパティを比較することは、明らかに道のりではありません。イベントをキャプチャするコンポーネントをいくつか見つけましたが、これをサードパーティのコンポーネントに依存したくないと思います。この分野に関する私の知識は限られているので、何が起こっているのかを理解する必要があります。できれば単純なソースコードを使用して、これにアプローチする方法を説明する優れた記事はありますか?

4

1 に答える 1

4

WebBrowserインスタンスのイベントにアクセスするには、IConnectionPointContainerインターフェイスのQueryInterfaceメソッドを使用してインターフェイスへのポインタを取得し、 DWebBrowserEvents2IWebBrowser2インターフェイスのGUIDを渡してFindConnectionPointメソッドを呼び出し、最後にインターフェイスのAdviseメソッドを呼び出して開始する必要があります。イベントを受け取ります。IConnectionPoint

そういうもの

var
 LConnectionPointContainer : IConnectionPointContainer;
 LConnectionPoint : IConnectionPoint;
 dwCookie: Longint;
begin
  //LWebBrowser2 is a IWebBrowser2 object
  LWebBrowser2.QueryInterface(IConnectionPointContainer, LConnectionPointContainer);
  LConnectionPointContainer.FindConnectionPoint(DWebBrowserEvents2, LConnectionPoint);
  LConnectionPoint.Advise(Self, dwCookie);
end;

このコードはすべて、Invokeメソッドでイベントを受信するために、IDispatchの子孫であるクラス内に実装する必要があります。あなたの場合のように、DocumentCompleteイベントをインターセプトする必要があり、DispIDパラメーターの値が259であるかどうかを確認する必要があります。

この説明のサンプルが必要な場合は、このコードを確認してみてくださいintercept Internet Explorer messages.

于 2012-06-10T17:35:33.710 に答える