### VC++ 开发 BHO 插件 —— 定制你的浏览器 #### 一、引言 在 Windows 操作系统中,文件浏览器 (explorer.exe) 和 Internet 浏览器 (iexplore.exe) 是最为人熟知的两款浏览器。虽然这两款浏览器功能强大且与 Windows 操作系统紧密结合,但在某些情况下,开发者可能需要为浏览器添加额外的功能或定制化选项。传统的做法是重新设计一款浏览器,但这不仅耗费时间和资源,而且在很大程度上属于重复劳动。本文将介绍一种更为高效的方法:利用 BHO(Browser Helper Objects)插件技术来扩展浏览器的功能。 #### 二、BHO 插件概述 BHO 是一种实现了特定接口的 COM 组件,主要用于增强 Internet Explorer 的功能。当 BHO 插件注册到 Windows 的注册表特定位置之后,每次启动 IE 时,该 BHO 实例会被自动创建。BHO 可以监听并响应浏览器的各种事件,如导航至新页面、前进、后退等,从而实现与浏览器的交互。 #### 三、BHO 工作原理 BHO 必须实现 `IObjectWithSite` 接口,并将其 CLSID 注册到注册表的 `HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\BrowserHelperObjects` 下。当浏览器启动时,它会检查该注册表路径下的 BHO CLSID 并创建相应的实例。 **示意图**: ``` +---------------------+ +------------------+ | Browser | | BHO Instance | | | | | | - Load BHO CLSIDs +---------> | - Receive Events | | - Create BHOs | | - Respond | | - Initialize BHOs | +------------------+ | | +---------------------+ ``` 成功创建的 BHO 不仅能监听标准的浏览器事件,还能自定义菜单、工具栏等界面元素,甚至可以安装钩子函数来监控浏览器的行为。 #### 四、支持 BHO 的系统版本 | Shell 版本 | 操作系统版本 | 支持 BHO 的浏览器 | |------------|--------------------------|------------------| | 4.00 | Windows 95, Windows NT 4.0 | 仅 IE 4.0 | | 4.71 | Windows 95, Windows NT 4.0 | IE 和文件浏览器 | | 4.72 | Windows 98 | IE 和文件浏览器 | | 5.00 | Windows 2000 | IE 和文件浏览器 | #### 五、开发 BHO 插件 本文将详细介绍使用 VC6.0 和 ATL 来开发 BHO 插件的过程。 1. **创建项目**: - 启动 VC6.0 的 ATL COM App Wizard,创建一个名为 `BhoPlugin` 的项目。 2. **添加 ATLObject**: - 使用菜单 Insert -> New ATL Object...,选择 "Internet Explorer Object" 类型,输入短名称 `EyeOnIE`。 3. **实现 IObjectWithSite 接口**: - 在 `EyeOnIE.h` 文件中定义以下成员变量: - `CComQIPtr<IWebBrowser2> mWebBrowser2;` (需包含 `"ExDisp.h"` 头文件) - `DWORD mCookie;` - 重写 `SetSite` 方法: ```cpp STDMETHOD(SetSite)(IUnknown *pUnkSite); ``` - 实现 `SetSite` 方法: ```cpp STDMETHODIMP CEyeOnIE::SetSite(IUnknown *pUnkSite) { if (pUnkSite) { mWebBrowser2 = pUnkSite; if (mWebBrowser2) { return RegisterEventHandler(TRUE); } } return E_FAIL; } ``` #### 六、事件处理与响应 接下来,需要实现 `RegisterEventHandler` 方法来注册 BHO 对浏览器事件的监听器,这一步骤至关重要,因为正是通过这些事件响应,BHO 才能与浏览器进行交互。 ```cpp HRESULT CEyeOnIE::RegisterEventHandler(BOOL bRegister) { if (bRegister) { // 注册事件处理 HRESULT hr = mWebBrowser2->put_onDocumentComplete(this); if (SUCCEEDED(hr)) { // 其他注册代码 } return hr; } else { // 卸载事件处理 mWebBrowser2->put_onDocumentComplete(NULL); return S_OK; } } ``` #### 七、总结 通过上述步骤,我们可以成功地开发一个简单的 BHO 插件来定制浏览器的功能。BHO 技术为开发者提供了一种高效的方式,使得无需重新编写整个浏览器程序即可为其添加新的特性。此外,通过实现不同的事件响应,BHO 还能进一步扩展其功能范围,满足不同场景的需求。
剩余28页未读,继续阅读
- 粉丝: 6
- 资源: 16
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 售酒物流平台需求规格说明书-核心功能与实现方案
- ZZU数据库原理实验报告
- 健康中国2030框架下智慧医药医疗博览会方案
- Cisco Packet Tracer实用技巧及网络配置指南
- 2023最新仿蓝奏云合集下载页面系统源码 带后台版本
- 国际象棋棋子检测8-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- jQuery信息提示插件
- 使用机器学习算法基于用户的社交媒体使用情况预测用户情绪
- 电动蝶阀远程自动化控制系统的构建与应用
- 基于resnet的动物图像分类系统(python期末大作业)PyQt+Flask+HTML5+PyTorch.zip