gpt4 book ai didi

delphi - 如何使用Delphi接收来自IE的事件?

转载 作者:行者123 更新时间:2023-12-03 15:52:49 24 4
gpt4 key购买 nike

我需要从每个浏览器窗口评估文档并采取相应的行动。我正在使用 shellwindows 来获取 IwebBrowser2。然后我就可以访问我需要的所有文档属性。即...

ShellWindows := TshellWindows.Create(nil);

...

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

...

ShellWindowDisp.QueryInterface(iWebBrowser2, WebBrowser);

等等......

据我所知,这个方法效果很好。但是,如果其中一个文档发生更改,我的代码将永远不会知道。因此,我需要监视资源管理器中的 OnDocumentComplete 等事件。将上面的代码转储到计时器中并比较属性显然不是正确的方法。我发现了几个捕获事件的组件,但不想依赖第三方组件来实现这一点。由于我在这方面的知识有限,我需要了解正在发生的事情。有没有好的文章解释如何解决这个问题,最好是使用简单的源代码?

最佳答案

为了访问 WebBrowser 实例的事件,您必须获取指向 IConnectionPointContainer 的指针。使用 IWebBrowser2 的 QueryInterface 方法的接口(interface)接口(interface),然后调用 FindConnectionPoint 方法并传递 DWebBrowserEvents2 的 GUID接口(interface),最后调用IConnectionPoint的Advise方法接口(interface)开始接收事件。

类似这样

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 方法中的事件。正如您的情况,您需要拦截 DocumentCompleteDispID 参数的值为 259 时,您必须检查该事件。

如果您想要此解释的示例,请尝试检查此代码 intercept Internet Explorer messages.

关于delphi - 如何使用Delphi接收来自IE的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10969754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com