BHO插件开发入门.doc

上传人:m**** 文档编号:563933534 上传时间:2024-02-16 格式:DOC 页数:13 大小:484.52KB
返回 下载 相关 举报
BHO插件开发入门.doc_第1页
第1页 / 共13页
BHO插件开发入门.doc_第2页
第2页 / 共13页
BHO插件开发入门.doc_第3页
第3页 / 共13页
BHO插件开发入门.doc_第4页
第4页 / 共13页
BHO插件开发入门.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《BHO插件开发入门.doc》由会员分享,可在线阅读,更多相关《BHO插件开发入门.doc(13页珍藏版)》请在金锄头文库上搜索。

1、目录一,BHO开发概述31.1 BHO的用途及实际应用31.2 BHO的工作原理及技术环境3二,框架设计42.1 构建BHO框架42.2实现IObjectWithSite的接口方法5三,注销SESSION73.1将BHO注册为浏览器的事件处理器73.2监听浏览器关闭事件,并向Server发送跳转指令83.3关闭BHO注销页面93.4阻止文件浏览器加载BHO93.5向注册表中注册BHO组件10四,打包发布104.1 BHO打包和找到关联Dll文件104.2编写自动安装脚本inf文件114.3用cabarc工具打包。12一,BHO开发概述1.1 BHO的用途及实际应用BHO(Browser Hel

2、p Objects),是实现了特定接口的COM组件。BHO只适用于Windows系统下的IE浏览器和文件浏览器。开发好的BHO插件在注册表特定的位置注册好后,每当微软的浏览器启动,BHO实例就会被创建。在浏览器工作的过程中,BHO会接收到很多事件,比如浏览器浏览新的地址、前进或后退、生成新的窗口、浏览器退出等等。BHO可以在这些事件的响应中实现与浏览器的交互。本文档中我们将通过编写一个BHO实例来详细讲解BHO开发的一般流程。该实例的功能是:当用户成功登陆网站后,如果用户点击IE关闭按钮,BHO将捕获IE关闭事件,同时向Server发送一个注销当前用户Session的请求。Server注销后跳

3、转到BHO注销页面,BHO捕获到BHO注销页面时,关闭该页面。 1.2 BHO的工作原理及技术环境BHO是COM组件,而且一定实现了IObjectWithSite接口。这些组件除了在注册表中注册为COM Server外,还必须将它们的CLSID在HKEY_LOCAL_MACHINESOFTWARE Windows CurrentVersion ExplorerBrowser Helper Objects下注册为子键。微软在设计浏览器的时候,已经给这些组件预留了空间。每当浏览器启动时,浏览器会首先在上述注册表位置查看是否有注册的 BHO CLSID;如果有则分别创建一个实例,并对BHO实例进行初

4、始化,建立交互连接。(注:BHO实例只有在创建它的浏览器窗口销毁时才被释放。)图1.1演示了BHO的创建过程: 图1.1表1.1 BHO支持的操作系统一览及IE一览IE版本操作系统版本支持BHO4.00Windows 95 and Windows NT 4.0仅IE4.05.00Windows2000IE和文件浏览器6.00WindowsXPIE和文件浏览器7.00VistaIE和文件浏览器二,框架设计2.1 构建BHO框架n 开发环境: Microsoft Visual C+ 6.0n 步骤1:建立一个工作区(WorkSpace)。n 步骤2:在工作区中,建立一个 ATL 工程(Projec

5、t)。示例程序叫TEST,并选择DLL方式,见图2.1。 图2.1n 步骤3:增加ATL对象类。在菜单 InsertNew ATL Object.(或者用鼠标右键在 ClassView 卡片中弹出菜单)并选择Object 分类,选中 Internet Exploer 项目。见图2.2。图2.2n 步骤4:填写COM类的名称。只要输入Short Name,其它自动生成。见图2.3。图2.32.2实现IObjectWithSite的接口方法n 步骤1:先定义几个成员变量:CComQIPtr mWebBrowser2,(需要加入#include ExDisp.h),用以保存浏览器组件的指针;DWOR

6、D mCookie,用以保存与浏览器的连接ID。见图2.4变量声明图2.4(详见MyBho.h文件)n 步骤2:IObjectWithSite有两个接口方法:SetSite和GetSite。我们只需重载 SetSite就行了。在ImyBho中增加函数声明SetSite函数。见图2.5图2.5n 步骤3: 实现IDispatch接口方法。事件处理也就在IDispatch:Invoke中实现(各个事件的ID在ExDispID.h中定义)。 BHO可能会接收到很多事件,但我们只需要响应我们感兴趣的那一部分。首先在ImyBho中增加该函数的声明。见图2.6图2.6n 步骤4: ImyBho添加Regi

7、sterEventHandler(BOOL inAdvise)方法声明,实现向IE注册和注销事件。详见附录代码。通过上面的步骤,一个基本的BHO对象框架已经建立起来了。下一节来我们将根据具体要实现的功能(向Server发送注销Session命令)对代码主要功能作说明。三,注销Session3.1将BHO注册为浏览器的事件处理器 注册BHO的事件的工作主要在SetSite函数中来完成。首先保存浏览器指针到mWebBrowser2成员变量中去。然后调用RegisterEventHandler函数向浏览器注册为事件处理器。见图3.1/* 说明:SetSite(IUnknown *pUnkSite)是

8、IObjectWithSite接口的方法。功能:1.保存浏览器组件指针, 2.BHO向浏览器注册为事件处理器。*/STDMETHODIMP CMyBho:SetSite(IUnknown *pUnkSite)if (pUnkSite) /保存浏览器指针到mWebBrowser2成员变量中去。 mWebBrowser2 = pUnkSite; if (mWebBrowser2)/向浏览器注册为事件处理器。 return RegisterEventHandler(TRUE); return E_FAIL;/* 说明:自定义函数,用以注册/注销BHO事件。 功能:根据传入的参数TRUE/FALSE来

9、向浏览器注册/注销BHO事件。 */STDMETHODIMP CMyBho:RegisterEventHandler(BOOL inAdvise)CComPtr spCP;/ 得到浏览器的连接点CComQIPtr spCPC(mWebBrowser2);HRESULT hr = spCPC-FindConnectionPoint(DIID_DWebBrowserEvents2, &spCP);if (FAILED(hr)return hr;if (inAdvise)/ 向浏览器注册事件。hr = spCP-Advise(reinterpret_cast(this), &mCookie);els

10、e/ 向浏览器注销事件。spCP-Unadvise(mCookie);return hr; 图3.1(详见MyBho.cpp文件)3.2监听浏览器关闭事件,并向Server发送跳转指令监听浏览器事件,全部在Invoke函数中来完成。当捕获了浏览器退出事件(DISPID_ONQUIT)时,首先取得页面的窗口名,判读是不是成功登陆页面。如果是,向Server 的LogOffAction发送一组数据,通知Server是BHO注销事件。然后退出IE。见图3.2case DISPID_ONQUIT: /取得当前页面的标题。 BSTR lpHader = NULL; mWebBrowser2-get_Lo

11、cationName(&lpHader); /如果是标题是“登录成功页面”的话,说明用户关闭的是已经登录的主页。 if (strstr( 登录成功页面, OLE2CA(lpHader) /需要跳转到Server的LogOutAction中去的URL。 LPTSTR hostUrl = _T(http:/localhost:8080/LogOff/logout.do);/向Server发送action=BhoLogoff,提示是BHO注销事件。LPTSTR postData = _T(action=BhoLogoff);/取得POST数据长度。int size = WideCharToMulti

12、Byte(CP_ACP, 0, A2COLE(postData), -1, 0, 0, 0, 0);/为调用Navigate2方法定义参数。VARIANT vURL;VARIANT vFlags;VARIANT vPostData;VARIANT vHeaders;VARIANT vNull; /此处略去给参数赋值的代码,详见MyBho.cpp中的Invoke函数。 . /跳转函数,并向Server发送数据。mWebBrowser2-Navigate2(&vURL, &vFlags, &vNull, &vPostData, &vHeaders);/注销BHO事件处理器。RegisterEven

13、tHandler(FALSE);break;图3.2(详见MyBho.cpp文件)3.3关闭BHO注销页面当Server监听到BHO发来的注销命令时,Server注销当前用户的Session后,跳转到一个专门的BHO注销页面(正常情况下是注销退出到登陆页面)。当BHO检测到IE已经跳转到BHO注销页面时,就将窗口关闭。从而使用户对于注销过程可以忽视。见图3.3。case DISPID_NAVIGATECOMPLETE2:/监听页面跳转完毕事件/参数合法性检查if (pDispParams-rgvarg0.vt = (VT_BYREF|VT_VARIANT)char * strurl; CComVariant varURL(*pDispParams-rgvarg0.pvarVal); varURL.ChangeType(VT_BSTR);strurl = OLE2A(varURL.bstrVal);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号