簡體   English   中英

如何使用Delphi從IE接收事件?

[英]How to receive events from IE using Delphi?

我需要從每個瀏覽器窗口評估文檔並采取相應措施。 我正在使用shellwindows來獲取IwebBrowser2。 然后我可以訪問我需要的所有文檔屬性。 即...

ShellWindows:= TshellWindows.Create(nil);

...

ShellWindowDisp:= ShellWindows.Item(Count); // for循環

...

ShellWindowDisp.QueryInterface(iWebBrowser2,WebBrowser);

等等....

據我所知,這種方法很好用。 但是,如果其中一個文檔發生變化,我的代碼就永遠不會知道。 因此,我需要監視資源管理器以查找OnDocumentComplete等事件。 將上面的代碼轉儲到計時器中並且比較屬性顯然不是可行的方法。 我發現了幾個捕獲事件的組件,但寧願不依賴於第三方組件。 由於我對這方面的了解有限,我需要了解發生了什么。 那里有任何好文章解釋如何處理這個問題,最好是簡單的源代碼?

為了訪問WebBrowser實例的事件,您必須使用IWebBrowser2接口的QueryInterface方法獲取指向IConnectionPointContainer接口的指針,然后調用FindConnectionPoint方法傳遞DWebBrowserEvents2接口的GUID,最后調用IConnectionPoint接口的Advise方法開始接收事件。

像這樣的東西

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;

所有這些代碼必須在從IDispatch繼承的類中實現,以便在Invoke方法中接收事件。 在您的情況下,您需要攔截DocumentComplete事件,您必須檢查DispID參數的值是否為259。

如果您需要此解釋的示例,請嘗試檢查此代碼intercept Internet Explorer messages.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM