定制IE浏览器的尖兵利器 - BHO
? IE瀏覽器是當前使用人數最廣的瀏覽器, 本文主要來講述如何來打造我們自己特色的瀏覽器, 自定義工具欄按鈕, 自定義網頁的右擊菜單, BHO技術與IE瀏覽器. 本文寫作過程中參考不少網絡上的相關資料, 我將在最后的參考資料中列出這些文章.
自定義工具欄按鈕
我們經常看到迅雷, 網際快車(FlashGet)等軟件安裝后會向IE的工具條添加自己的按鈕。按下按鈕后還會作出相應的動作,這種功能是如何實現的呢?
基本原理:
從IE5開始便允許我們向工具欄添加自己的按鈕,其本質就是修改注冊表,添加創建此按鈕所需的信息。
實現步驟:
1.創建此按鈕的GUID(globally unique identifier)
你可以通過Visual Studio中的Guidgen.exe來產生GUID。
例如我生成的GUID是{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}
以下的例子中我都使用這個GUID來作說明。
2.創建子鍵HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Extensions\{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}
3.在此子鍵下創建如下字串值。
(1)CLSID
這是IE的CLSID,其值必須為{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}
(2)Default Visible
指明此按鈕默認狀態下是否可見,Yes表示可見,No為不可見
(3)ButtonText
按鈕文字
(4)Icon
默認狀態下的圖標全路徑,例如c:\vckbase.ico。也可以是EXE文件中包含的圖標,例如:C:\PROGRA~1\NETANTS\NetAnts.exe,1000(后面的1000是指EXE文件中該圖標文件對應的資源ID)
(5)HotIcon
鼠標移到按鈕上時的圖標全路徑
?
如下子鍵為按下按鈕后需要執行的相應動作:可以是COM對象、瀏覽條Explorer Bar、腳本Script、可執行文件。
下面我們逐個進行介紹。
①COM對象
你需要建立名為ClsidExtension的字串值,其值應該為此COM對象的GUID
例如金山詞霸就使用ClsidExtension來調用自己的COM對象。
②瀏覽條Explorer Bar
所謂瀏覽條就是類似我們按下往IE歷史按鈕后打開的歷史記錄列表,其本質好比MFC中的CReBar對象。 瀏覽條也可以自己制作,
因為超出了本文的范圍,暫不作講解。?
為了在按下按鈕后打開一個瀏覽條,你需要建立名為BandCLSID的字串值,其值為瀏覽條的CLSID
③腳本Script
按下按鈕后執行的腳本,例如:"%SystemRoot%\web\related.htm"
你可以在這個HTML文件里面加上腳本來得到IE當前的許多信息,需要注意的是假如你想通過Script打開非腳本的HTML文件是不可行的。
?
④可執行文件
假如我們想讓IE在按下按鈕后執行一個可執行文件, 你可以增加名為Exec的字串值,其值為此可執行文件的全路徑,
例如c:\windows\notepad.exe或者是一個網址如http://wwww.cnblogs.com?. 最終效果如下
?
?
自定義網頁的右擊菜單
我們經常看到頁面右擊菜單中的如迅雷下載所有鏈接, 百度搜藏, 乃至到收藏此頁到【博客園網摘】; 這些是如何實現的呢? 其實很簡單, 一句話修改注冊表即可.
一、在IE菜單中加入菜單項
在注冊表HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt項下建立一個新項,項的名稱即為出現在菜單中的標題
將新建項的默認值設定為一個URL地址,當用戶點擊菜單項后,IE就會調用URL指向的頁面中的腳本。舉例說明, 收藏此頁到【博客園網摘】中其URL地址:http://wz.cnblogs.com/rightclick/, 對應頁面就簡單一個JavaScript腳本, 大家如果感興趣可以查看一下其源代碼內容.
二、如何控制菜單項在合適的時候顯示
下面再介紹一下上面注冊項中Contexts項的作用,通過該項可以制定菜單項在右鍵點擊IE中的什么對象時出現,它可以為以下的值或其組合值
| 對象 | 值 |
| 缺省CONTEXT_MENU_DEFAULT | 0x1 |
| 圖片CONTEXT_MENU_IMAGE | 0x2 |
| 控件CONTEXT_MENU_CONTROL | 0x4 |
| 表單域 | 0x8 |
| 選擇文本CONTEXT_MENU_TEXTSELECT | 0x10 |
| 錨點CONTEXT_MENU_ANCHOR | 0x20 |
| 超鏈接 | 0x22 |
| 右鍵點擊網頁中除上以外的地方顯示該項 CONTEXT_MENU_UNKNOWN | 0x40 |
?
例如上面我們希望菜單項在用戶點擊圖片或者超鏈接時出現,那么我們就將值設置為
dword:00000022既在點擊圖片 或者 錨點時出現菜單。一個錨點是頁面中描述一個超鏈接的對象。如果不設置Contexts 項,則菜單項會在點擊任何對象時出現在右鍵菜單中。收藏此頁到博客園網摘功能就是缺省設置.
?
BHO
BHO(瀏覽器輔助對象)是一種簡單的ATL COM對象,而Internet Explorer會在每次運行時都加載它;換句話來說,即每個Internet Explorer的實例都會加載它。BHO運行在Internet Explorer的地址空間內,能對可訪問的對象(如窗口、模塊等等)執行任何操作,且因為它依附于瀏覽器的主窗口,所以其生命期與瀏覽器實例的生命期一致。
如果在系統中打開了活動桌面,BHO也能隨同Windows Explorer一起啟動。如果不想在Windows Explorer中運行BHO,可將如下代碼添加到DLLMain中:
TCHAR strLoader[MAX_PATH];
::GetModuleFileName (NULL, strLoader, MAX_PATH);
if(stricmp("explorer.exe", strLoader) == 0)
return FALSE;
BHO的COM Server必須實現IObjectWithSite,以便對象可以掛鉤到瀏覽器事件,Internet Explorer會依靠IObjectWithSite將一個指針傳遞到它的IUnknown接口,所以,只需實現IObjectWithSite的SetSite方法就行了.
?
參考瀏覽器幫助程序對象
http://msdn.microsoft.com/library/techart/bho.htm
IWebBrowser2::ShowBrowserBar 方法
http://msdn.microsoft.com/workshop/browser/webbrowser/reference/IFaces/IWebBrowser2/ShowBrowserBar.asp
Browser Helper Objects: The Browser the Way You Want It
如何使用BHO定制你的Internet Explorer瀏覽器
IHTMLSelectionObject2 Interface
http://msdn.microsoft.com/en-us/library/aa768843(VS.85).aspx
ActiveX Security: Improvements and Best Practices
http://msdn.microsoft.com/en-us/library/bb250471(VS.85).aspx#psd
Building Browser Helper Objects with Visual Studio 2005
http://msdn.microsoft.com/en-us/library/bb250489(VS.85).aspx
BHO,好厲害的東東
VC++開發BHO插件——定制你的瀏覽器 作者 陸其明
轉載于:https://www.cnblogs.com/mvc2014/p/3775987.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的定制IE浏览器的尖兵利器 - BHO的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 香港小學一年級入學考試題
- 下一篇: .net 浏览器请求过程(图)