BHO插件开发入门
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一,BHO开发概述 (2)
1.1BHO的用途及实际应用 (2)
1.2BHO的工作原理及技术环境 (2)
二,框架设计 (3)
2.1构建BHO框架 (3)
2.2实现IO BJECT W ITH S ITE的接口方法 (5)
三,注销SESSION (6)
3.1将BHO注册为浏览器的事件处理器 (6)
3.2监听浏览器关闭事件,并向S ERVER发送跳转指令 (7)
3.3关闭BHO注销页面 (8)
3.4阻止文件浏览器加载BHO (9)
3.5向注册表中注册BHO组件 (9)
四,打包发布 (10)
4.1BHO打包和找到关联D LL文件 (10)
4.2编写自动安装脚本INF文件 (11)
4.3用CABARC工具打包。 (12)
一,BHO开发概述
1.1 BHO的用途及实际应用
BHO(Browser Help Objects),是实现了特定接口的COM组件。BHO只适用于Windows系统下
的IE浏览器和文件浏览器。开发好的BHO插件在注册表特定的位置注册好后,每当微软的浏览器启动,BHO实例就会被创建。在浏览器工作的过程中,BHO会接收到很多事件,比如浏览器浏览新的地址、前进或后退、生成新的窗口、浏览器退出等等。BHO可以在这些事件的响应中实现与浏览器的
交互。
本文档中我们将通过编写一个BHO实例来详细讲解BHO开发的一般流程。该实例的功能是:当
用户成功登陆网站后,如果用户点击IE关闭按钮,BHO将捕获IE关闭事件,同时向Server发送一
个注销当前用户Session的请求。Server注销后跳转到BHO注销页面,BHO捕获到BHO注销页面时,
关闭该页面。
1.2 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一览
二,框架设计
2.1 构建BHO框架
⏹开发环境: Microsoft Visual C++ 6.0
⏹步骤1:建立一个工作区(WorkSpace)。
⏹步骤2:在工作区中,建立一个ATL 工程(Project)。示例程序叫TEST,并选择
DLL方式,见图2.1。
图2.1
⏹步骤3:增加ATL对象类。在菜单Insert\New ATL Object...(或者用鼠标右键在
ClassView 卡片中弹出菜单)并选择Object 分类,选中Internet Exploer 项目。见图2.2。
图2.2
⏹步骤4:填写COM类的名称。只要输入Short Name,其它自动生成。见图2.3。
图2.3
2.2实现IObjectWithSite 的接口方法
⏹ 步骤1:先定义几个成员变量:CComQIPtr
mWebBrowser2,(需要加入#include "ExDisp.h"),用以保存浏览器组件的指针;DWORD mCookie ,用以保存与浏览器的连接ID 。见图2.4
图2.4(详见
MyBho.h 文件)
⏹ 步骤2:IObjectWithSite 有两个接口方法:SetSite 和GetSite 。我们只需重载 SetSite
就行了。在ImyBho 中增加函数声明SetSite 函数。见图2.5
变量声明
图2.5
⏹步骤3: 实现IDispatch接口方法。事件处理也就在IDispatch::Invoke中实现(各个事
件的ID在ExDispID.h中定义)。 BHO可能会接收到很多事件,但我们只需要响应我们感兴趣的那一部分。首先在ImyBho中增加该函数的声明。见图2.6
图2.6
⏹步骤4: ImyBho添加RegisterEventHandler(BOOL inAdvise)方法声明,实现向IE注
册和注销事件。详见附录代码。
通过上面的步骤,一个基本的BHO对象框架已经建立起来了。下一节来我们将根据具体要实现的功能(向Server发送注销Session命令)对代码主要功能作说明。
三,注销Session
3.1将BHO注册为浏览器的事件处理器
注册BHO的事件的工作主要在SetSite函数中来完成。首先保存浏览器指针到mWebBrowser2成员变量中去。然后调用RegisterEventHandler函数向浏览器注册为事件处理器。见图3.1
图3.1(详见MyBho.cpp文件)
3.2监听浏览器关闭事件,并向Server发送跳转指令
监听浏览器事件,全部在Invoke函数中来完成。当捕获了浏览器退出事件(DISPID_ONQUIT)
时,首先取得页面的窗口名,判读是不是成功登陆页面。如果是,向Server 的LogOffAction发送一组数据,通知Server是BHO注销事件。然后退出IE。见图3.2
图3.2(详见MyBho.cpp文件)
3.3关闭BHO注销页面
当Server监听到BHO发来的注销命令时,Server注销当前用户的Session后,跳转到一个专门的BHO注销页面(正常情况下是注销退出到登陆页面)。当BHO检测到IE已经跳转到BHO注销页面时,就将窗口关闭。从而使用户对于注销过程可以忽视。见图3.3。