李華偉 李 芹 王 瑜
(泰安市中心醫(yī)院信息中心,山東 泰安 271000)
瀏覽器輔助對象技術(shù),全稱Browser Helper Object,以下簡稱BHO,就是我們常說的IE瀏覽器插件。它是微軟推出的作為瀏覽器對第三方程序員開放交互接口的業(yè)界標準,利用BHO的交互接口,就可以在加載IE瀏覽器的同時進行相應(yīng)的IE控制處理或加載其它程序,實現(xiàn)與IE瀏覽器的交互。本文通過VB的實際開發(fā)案例,提供了VB利用BHO開發(fā)相關(guān)程序的核心代碼,通過簡單的演示,為開發(fā)者提供一種開發(fā)思路。
BHO的目的是為了更好的幫助程序員打造個性化瀏覽器,以及為程序提供更簡潔的交互功能,現(xiàn)在很多IE個性化工具就是利用BHO的來實現(xiàn)。符合BHO接口標準的程序代碼被寫為DLL動態(tài)鏈接庫形式在注冊表里注冊為COM對象,還要在BHO接口的注冊表入口處(即HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerBrowserHelperObjects)進行組件注冊,以后每次IE啟動時都會通過這里描述的注冊信息調(diào)用加載這個DLL文件,而這個DLL文件就因此成為IE的一個模塊(BHO組件),與IE共享一個運行周期,直到IE被關(guān)閉。
下面采用VB6.0來創(chuàng)建Browser Helper Object,實現(xiàn)記錄IE瀏覽網(wǎng)址與日期時間,詳細過程與代碼如下:
2.1 打開VB6.0,點擊菜單欄[文件]--[新建工程],在彈出的 [新建工程]頁面中選擇ActiveX DLL,保存工程為TestBHO.vbp;
2.2 將類模塊中的Class1改名為TestBHO并保存為TestBHO.cls;
2.3 點擊菜單欄[工程]--[引用],選擇引用“VB ShellLibrary”(VBSHELL.TLB)、“Microsoft HTML ObjectLibrary”(MSHTML.TLB)、“Microsoft Internet Controls”(shdocvw.dll);
2.4 在類模塊TestBHO.cls中添加核心接口代碼,實現(xiàn)與IE的接口,代碼如下:
Option Explicit
Implements IObjectWithSite
PrivateDeclareSub CopyMemory Lib“Kernel32”Alias“RtlMoveMemory”(pDstAs Any,pSrc As Any,ByVal ByteLen As Long)
Private moUnknown As IUnknownVB
Private WithEvents moBrowser As InternetExplorer
記錄網(wǎng)址的文件路徑
Dim mSavePath As String
'加載Dll文件時初始化變量
Private Sub Class_Initialize()
'將網(wǎng)址記錄到c:ho.txt下
mSavePath="C:ho.txt"
End Sub
Private Sub IObjectWithSite_GetSite(By-Val priid As VBShellLib.REFIID,ppvObj As VBShellLib.VOID)
If Not(moUnknown Is Nothing)Then
moUnknown.QueryInterface priid,ppvObj
End If
End Sub
Private Sub IObjectWithSite_SetSite(By-Val pSite As VBShellLib.IUnknownVB)
Set moUnknown=pSite
If ObjPtr(pSite)=0 Then
CopyMemory moBrowser,0 & ,4
Set moUnknown=Nothing
Set moBrowser=Nothing
Else
Set moBrowser=moUnknown
End If
End Sub
'將字符串聯(lián)寫入指定路徑的文檔
Private Sub WriteTxt(ByValUrlAs String)
Open mSavePath For Append As 1
Print#1,Date$ & "" & Time$ & "" & Url
Close#1
End Sub
'網(wǎng)頁打開完成時,將上網(wǎng)地址記錄到指定文件
Private Sub moBrowser_DocumentComplete(ByVal pDisp As Object,Url As Variant)
Call WriteTxt(Url)
End Sub
2.5 生成接口dll文件TestBHO.dll并復(fù)制到系統(tǒng)system32目錄下;
2.6 運行"regsvr32 TestBHO.dll"注冊TestBHO.dll文件,然后打開注冊表,通過查找TestBHO.dll,找到其CLSID(筆者的 dll文件CLSID為{5B173AEA-A51B-4FB1-89B2-88C7A0D20C9D}),再從注冊表中找到接口HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerBrowser Helper Objects,在其下新建項,項名為TestBHO.dll的CLSID;
2.7 新打開一個IE瀏覽器,打開幾個網(wǎng)頁,再查看C:ho.txt文件,是不是已經(jīng)記錄了你瀏覽的網(wǎng)頁地址,效果如何?
至此,這個BHO接口已經(jīng)完成,每次新打開一個IE窗口,都會加載TestBHO.dll,每打開一個網(wǎng)頁,都會將上網(wǎng)日期時間、網(wǎng)頁地址記錄到C:ho.txt中,關(guān)閉IE窗口時,TestBHO.dll也會自動關(guān)閉,不再運行記錄網(wǎng)址。
目前,BHO技術(shù)已經(jīng)廣泛應(yīng)用于互聯(lián)網(wǎng)程序開發(fā)中,實現(xiàn)的功能也多種多樣,包括網(wǎng)頁內(nèi)容過濾、自動填單、廣告攔截、上網(wǎng)行為監(jiān)控、網(wǎng)頁翻譯等功能,大家熟知的軟件像百度工具條、迅雷等工具都利用了BHO技術(shù),甚至很多病毒、木馬、流氓軟件也都利用了這種技術(shù),當然,清理它們的殺毒軟件,專殺工具也要利用此技術(shù),所以掌握這種技術(shù)對相關(guān)程序開發(fā)很有幫助。
本文中的程序僅是實現(xiàn)BHO接口的一個簡單功能的案例,作為一個接口演示,提供一個思路,希望起到拋磚引玉的作用,讓大家能做出更多更實用的程序。
[1]COM/DCOM技術(shù)內(nèi)幕.(美)阿伯內(nèi)西著汪浩等譯.2000.電子工業(yè)出版社.
[2]深入解析Windows操作系統(tǒng).(美)Russinovich,M.E.(美)Solomon,D.A.2007.電子工業(yè)出版社
[3]COM本質(zhì)論.DON BOX.2001.中國電力出版社