扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者: Tony Schreiner,John Sudds 来源:微软 2007年10月16日
关键字: Visual Studio 浏览器 帮助对象
简介
本文凭借 Microsoft Visual Studio 2005 和“活动模板库”(ATL) 来开发使用 C++ 的 BHO。我们之所以决定使用 ATL,是因为它方便地实现了我们可以按需进行扩展的基本样板。还有其他方法可供用于创建 BHO(例如,使用“Microsoft 基础类”(MFC) 或 Win32 API 和 COM),但 ATL 是为我们自动处理许多细节的轻型库,包括建立含有 BHO 类标识符 (CLSID) 的注册表。
ATL 的另一个优势在于它的 COM 感知智能指针类(例如,CComPtr 和 CComBSTR),这些类可管理 COM 对象的生命周期。例如,CComPtr 在赋值时会调用 AddRef,而在对象被销毁或超出范围时会调用 Release。智能指针简化了代码并且有助于避免内存泄漏。当在单个方法范围内使用时,它们的稳定性和可靠性尤为有用。
本文的第一部分向您逐步介绍了如何实现简单的 BHO 并验证它是否由 Internet Explorer 加载。接下来的部分将说明如何将 BHO 连接到浏览器事件,最后一部分将介绍与更改网页外观的 DHTML 文档对象模型 (DOM) 的简单交互。
概述
到底什么是浏览器帮助程序对象 (BHO)?简言之,BHO 是将自定义功能添加到 Internet Explorer 的轻型 DLL 扩展。BHO 还可以将功能添加到 Windows 资源管理器外壳程序(尽管这并不常见,也不是本文重点)。
BHO 通常并不提供其自身的任何用户界面 (UI)。它们而是通过在后台响应浏览器事件和用户输入数据来发挥作用。例如,BHO 可以拦截弹出窗口、自动填充窗体或为鼠标手势添加支持。有一种常见误解认为工具栏扩展项需要 BHO;但如果将 BHO 与工具栏配合使用,则可以实现更丰富的用户体验。
注意 BHO 对于最终用户和开发人员同样都是便捷的工具;但由于 BHO 被赋予了对浏览器和 Web 内容的相当大的控制能力,并且它们通常都处于未检测的状态,因此用户应十分谨慎地从可靠来源获取和安装 BHO。
BHO 的生命周期与它所交互的浏览器实例的生命周期相等。在 Internet Explorer 6 和早期版本中,这意味着为每个新的顶层窗口都创建(和销毁)一个新 BHO。另一方面,Internet Explorer 7 会为每个选项卡都创建和销毁一个新 BHO。BHO 不是由承载 WebBrowser 控件的其他应用程序加载,也不是由 HTML 对话框之类的窗口加载。
BHO 的主要要求是实现 IObjectWithSite 接口。此接口提供了一个方法(即 SetSite),此方法方便了与 Internet Explorer 的初始通信,并会在其将要释放时通知 BHO。我们实现此接口,然后将 BHO 的 CLSID 添加到注册表中,由此创建一个简单的浏览器扩展。
让我们开始吧。
建立项目
通过 Microsoft Visual Studio 2005 创建 BHO 项目:
1.在“文件”菜单上,单击“新建项目...”。
随即出现“新建项目”对话框。此对话框将列出 Visual Studio 可以创建的应用程序类型。
2.在 Visual C++ 节点下,选中“ATL”(如果它未被选中),然后从 Visual C++ 项目类型中选择“ATL 项目”。将项目命名为“HelloWorld”并使用默认位置。单击“确定”。
3.在“ATL 项目向导”中,确保服务器类型为“动态链接库 (DLL)”,然后单击“完成”。
此时,Visual Studio 已为 DLL 创建了样板。现在,我们将添加实现 BHO 的 COM 对象。
4.在“解决方案资源管理器”面板上,右键单击该项目,然后从“添加”子菜单中选择“类...”。
5.选中“ATL 简单对象”,然后单击“添加”。
随即出现“ATL 简单对象向导”。
6.在“ATL 简单对象向导”的“名称”中,键入“HelloWorldBHO”以作为“短名称”。
余下的名称将自动填充。
7.在“ATL 简单对象向导”的“选项”中,选中“线程模型”下的“Apartment”、“聚合”下的“否”、“接口”下的“双重”以及“支持”下的“IobjectWithSite”。
8.单击“完成”。
以下文件将作为此项目的一部分创建。
•HelloWorldBHO.h – 此头文件包含 BHO 的类定义。
•HelloWorldBHO.cpp – 此源文件是项目的主文件并且包含 COM 对象。
•HelloWorld.cpp – 此源文件用于实现通过 DLL 提供 COM 对象的导出。
•HelloWorld.idl – 此源文件可用于定义自定义 COM 接口。对于本文,我们将不更改此文件。
•HelloWorld.rgs – 此资源文件包含注册和取消注册 DLL 时编写和删除的注册表项。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者