WEB开发网
开发学院软件开发VC 用VisualStudio2005生成浏览器帮助对象(BHO) 阅读

用VisualStudio2005生成浏览器帮助对象(BHO)

 2007-03-15 21:46:38 来源:WEB开发网   
核心提示: 注意 在 Windows Vista 上,Internet Explorer 的“保护模式”功能将启动另一个进程,用VisualStudio2005生成浏览器帮助对象(BHO)(7),然后退出,这样会给调试带来一点难度,以将事件路由到相应的处理程序函数,我们明确说明

注意 在 Windows Vista 上,Internet Explorer 的“保护模式”功能将启动另一个进程,然后退出,这样会给调试带来一点难度。您可以通过以下两种方式轻松关闭当前会话的“保护模式”:从管理进程(例如 Visual Studio)启动浏览器,或者创建一个本地 HTML 文件并将其指定为 Internet Explorer 的命令行参数。

浏览器启动时,将加载 BHO 的 DLL。命中断点时,请注意是否设置了 pUnkSite 参数。再次按 F5 以继续加载主页。

关闭浏览器以验证是否通过 NULL 再次调用了 SetSite。

对事件做出响应

既然已经确认了 Internet Explorer 可以加载和运行 BHO,那就让我们在所举示例的基础上再深入一些,将 BHO 扩展到响应浏览器事件。在本部分中,我们介绍如何使用 ATL 为 DocumentComplete(在页面加载后显示一个消息框)实现一个事件处理程序。

为接到事件通知,BHO 建立一个与浏览器之间的连接点;为响应这些事件,它将实现 IDispatch。根据 DocumentComplete 的文档,该事件有两个参数:pDisp(IDispatch 的指针)和 pUrl。这些参数将作为事件的一部分传递给 IDispatch::Invoke;但手动析取这些事件参数并非一项简单的任务,并且易于出错。幸好 ATL 提供了一个默认实现,可以帮助简化这个事件处理逻辑。

HelloWorldBHO.h

首先通过包含 exdispid.h(为浏览器事件定义调度 ID)处理 HelloWorldBHO.h。

#include // DISPID_DOCUMENTCOMPLETE 等。

接下来,从 IDispEventImpl 基类进行派生,该基类为处理事件提供了除 Invoke 之外的另一个简单安全的替代方法。IDispEventImpl 与事件汇映射配合工作,以将事件路由到相应的处理程序函数。我们明确说明,想要使用以下类定义(突出显示)处理由 DWebBrowserEvents2 接口定义的事件。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:VisualStudio 生成 浏览器

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接