天天看点

创建一个BHO

 BHO(Browser Helper Object,浏览器辅助对象,简称BHO)

BHO是微软推出的作为浏览器对第三方程序员开放交互接口的业界标准,通过简单的代码就可以进入浏览器领域的“交互接口”(INTERACTIVED Interface)。通过这个接口,程序员可以编写代码获取浏览器的行为,比如“后退”、“前进”、“当前页面”等,利用BHO的交互特性,程序员还可以用代码控制浏览器行为,比如修改替换浏览器工具栏,添加自己的程序按钮等。

在vs中创建一个BHO(使用C++),需要以下步骤:

1.新建一个ATL工程,起名为BHODemo

2.工程新建好之后,切换到类视图,新加一个ATL简单对象MyBHO,按照向导所示,添加过程中选中支持IObjectWithSite

3.可以看到,生成了一个接口实现类CMyBHO,在其中添加一个继承的父类:public  IDispEventImpl<1 ,CMyBHO,&DIID_DWebBrowserEvents2,&LIBID_SHDocVw,1 ,1 > 和两个方法

STDMETHOD(SetSite)(IUnknown * pUnkSite);  // 覆盖父类IObjectWithSiteImpl的方法

void STDMETHODCALLTYPE OnDocumentComplete(IDispatch* pDisp, VARIANT* URL);//文档加载完成时的动作

4.添加事件接收器部分:

BEGIN_SINK_MAP(CMyBHO)

    SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_DOCUMENTCOMPLETE, OnDocumentComplete)

END_SINK_MAP()

此时第一个参数1,要和IDispEventImpl后面参数中的1的数值要保持一致.这样DISPID_DOCUMENTCOMPLETE消息由IE传过来到BHO时,才会调用对应的OnDocumentComplete.可以继承多IDispEventImpl的,但要保证里面第一个参数,即序号不一样.

5.实现SetSite和OnDocumentComplete

由于暂时还不做更多操作,所以SetSite实现直接调用IObjectWithSiteImpl<CMyBHO>::SetSite(pUnkSite);而OnDocumentComplete先放空.

现在的源文件应该是长这个样子的:

cpp文件应该是这样:

6.注册表文件

修改BHODemo.rgs文件,删除原先内容,改为:

卸载:直接去工程debug目录中regsvr32 /u BHODemo.dll就行了.同样要注意win7下的权限问题.

本文转自leipei博客园博客,原文链接:http://www.cnblogs.com/leipei2352/archive/2012/11/10/2763604.html,如需转载请自行联系原作者