天天看點

建立一個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,如需轉載請自行聯系原作者