科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道用VisualStudio2005生成浏览器帮助对象

用VisualStudio2005生成浏览器帮助对象

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

用VisualStudio2005生成浏览器帮助对象

作者: Tony Schreiner,John Sudds 来源:微软 2007年10月16日

关键字: Visual Studio 浏览器 帮助对象

  • 评论
  • 分享微博
  • 分享邮件
摘要:本文说明了如何使用 Microsoft Visual Studio 2005 创建一个简单的“浏览器帮助程序对象”(BHO),即实现 IObjectWithSite 接口并将其自身附加到 Internet Explorer 的一种“组件对象模型”(COM) 对象。本文逐步说明了如何创建入门级 BHO。首先,BHO 会在 Internet Explorer 加载文档时显示消息“大家好!”。然后,BHO 被扩展为从已加载页面删除图像。本文面向的是想要了解如何扩展浏览器功能以及如何为 Internet Explorer 创建 Web 开发人员工具的开发人员(本文还包含指向英文网页的链接)。

  简介

  本文凭借 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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章