一,BHO开发概述1.1 BHO的用途及实际应用1.2 BHO的工作原理及技术环境二,框架设计2.1 构建BHO框架2.2实现IObjectWithSite的接口方法三,注销Session3.1将BHO注册为浏览器的事件处理器3.2监听浏览器关闭事件,并向Server发送跳转指令3.3关闭BHO注销页面3.4阻止文件浏览器加载BHO3.5向注册表中注册BHO组件四,打包发布4.1 BHO打包和找到关联Dll文件4.2编写自动安装脚本inf文件4.3用cabarc工具打包。的用途及实际应用
BHO(Browser Help Objects),是实现了特定接口的COM组件。BHO只适用于Windows系统下的IE浏览器和文件浏览器。开发好的BHO插件在注册表特定的位置注册好后,每当微软的浏览器启动,BHO实例就会被创建。在浏览器工作的过程中,BHO会接收到很多事件,比如浏览器浏览新的地址、前进或后退、生成新的窗口、浏览器退出等等。BHO可以在这些事件的响应中实现与浏览器的交互。
本文档中我们将通过编写一个BHO实例来详细讲解BHO开发的一般流程。该实例的功能是:当用户成功登陆网站后,如果用户点击IE关闭按钮,BHO将捕获IE关闭事件,同时向Server发送一个注销当前用户Session的请求。Server注销后跳转到BHO注销页面,BHO捕获到BHO注销页面时,关闭该页面。
的工作原理及技术环境
BHO是COM组件,而且一定实现了IObjectWithSite接口。这些组件除了在注册表中注册为COM Server外,还必须将它们的CLSID在HKEY_LOCAL_MACHINE\SOFTWARE\ Windows\ CurrentVersion\ Explorer\Browser Helper Objects下注册为子键。微软在设计浏览器的时候,已经给这些组件预留了空间。每当浏览器启动时,浏览器会首先在上述注册表位置查看是否有注册的 BHO CLSID;如果有则分别创建一个实例,并对BHO实例进行初始化,建立交互连接。(注:BHO实例只有在创建它的浏览器窗口销毁时才被释放。)图1.1演示了BHO的创建过程:
图1.1
表1.1 BHO支持的操作系统一览及IE一览
IE版本
操作系统版本
支持BHO
4.00
Windows 95 and Windows NT 4.0
仅IE4.0
5.00
Windows2000
IE和文件浏览器
6.00
WindowsXP
IE和文件浏览器
7.00
Vista
IE和文件浏览器
构建BHO框架
n 开发环境: Microsoft Visual C++ 6.0
n 步骤1:建立一个工作区(WorkSpace)。
n 步骤2:在工作区中,建立一个 ATL 工程(Project)。示例程序叫TEST,并选择DLL方式,见图2.1。
图2.1
n 步骤3:增加ATL对象类。在菜单 Insert\New ATL Object...(或者用鼠标右键在 ClassView 卡片中弹出菜单)并选择Object 分类,选中 Internet Exploer 项目。见图2.2。
图2.2
n 步骤4:填写COM类的名称。只要输入Short Name,其它自动生成。见图2.3。
图2.3
实现IObjectWithSite的接口方法
n 步骤1:先定义几个成员变量:CComQIPtr<IWebBrowser2, &IID_IWebBrowser2> mWebBrowser2,(需要加入#include "ExDisp.h"),用以保存浏览器组件的指针;DWORD mCookie,用以保存与浏览器的连接ID。见图2.4
变量声明
图2.4(详见MyBho.h文件)
n 步骤2:IObjectWithSite有两个接口方法:SetSite和GetSite。我们只需重载 SetSite就行了。在ImyBho中增加函数声明SetSite函数。见图2.5
图2.5
n 步骤3: 实现IDispatch接口方法。事件处理也就在IDispatch::Invoke中实现(各个事件的ID在ExDispID.h中定义)。 BHO可能会接收到很多事件,但我们只需要响应我们感兴趣的那一部分。首先在ImyBho中增加该函数的声明。见图2.6
图2.6
n 步骤4: ImyBho添加RegisterEventHandler(BOOL inAdvise)方法声明,实现向IE注册和注销事件。详见附录代码。
通过上面的步骤,一个基本的BHO对象框架已经建立起来了。下一节来我们将根据具体要实现的功能(向Server发送注销Session命令)对代码主要功能作说明。
将BHO注册为浏览器的事件处理器
注册BHO的事件的工作主要在SetSite函数中来完成。首先保存浏览器指针到mWebBrowser2成员变量中去。然后调用RegisterEventHandler函数向浏览器注册为事件处理器。见图3.1
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。