VB制作BHO

第一步
打开记事本,把下面代码复制进去,然后保存为IObjectWithSiteTLB.odl。

[
uuid(CF9D9B76-EC4B-470D-99DC-AEC6F36A9261),
helpstring("VB IObjectWithSite Interface"),
version(1.0)
]
library IObjectWithSiteTLB
{
importlib("stdole2.tlb");
typedef [public] long GUIDPtr;
typedef [public] long VOIDPtr;
[
uuid(00000000-0000-0000-C000-000000000046),
odl
]
interface IUnknownVB
{
HRESULT QueryInterface(
[in] GUIDPtr priid,
[out] VOIDPtr *pvObj
);
long AddRef();
long Release();
}
[
uuid(FC4801A3-2BA9-11CF-A229-00AA003D7352),
odl
]
interface IObjectWithSite:IUnknown
{
typedef IObjectWithSite *LPOBJECTWITHSITE;
HRESULT SetSite([in] IUnknownVB* pSite);
HRESULT GetSite([in] GUIDPtr priid, [in, out] VOIDPtr* ppvObj);
}
}

代码意思我也不太懂,大概是声明接口。VB里面不能实现。

第二步
1.开始菜单——运行——CMD。
2.把MKTYPLIB.EXE拖入CMD窗口。(示例压缩包中有)
3.别急着回车,在一长串文件名后面输入" /NOCPP"。(注意有一个空格)
4.回车后,弹出一个打开文件对话框。打开"第一步"中保存的IObjectWithSiteTLB.odl。
5.然后会有提示,如果成功的话,会在MKTYPLIB.EXE所在文件夹下生成IObjectWithSiteTLB.tlb。

第三步
1.打开VB6.0——新建一个工程——类型为activeX dll。
2.引用Microsoft Internet Controls和刚才得IObjectWithSiteTLB.tlb。
3.输入以下代码:
Implements IObjectWithSiteTLB.IObjectWithSite
Dim WithEvents IE As InternetExplorer
Dim M_Site As IUnknownVB

Private Sub IObjectWithSite_GetSite(ByVal Priid As IObjectWithSiteTLB.GUIDPtr, PPVobj As IObjectWithSiteTLB.VOIDPtr)
    M_Site.QueryInterface Priid, PPVobj
End Sub

Private Sub IObjectWithSite_SetSite(ByVal pSite As IObjectWithSiteTLB.IUnknownVB)
    Set M_Site = pSite
    Set IE = pSite
End Sub

第四步
前三步是准备工作,下面要编写你自己的代码了。
就是用webbrowser(Microsoft Internet Controls)实现对IE各个事件的控制

比如添加以下代码(其它事件就不一一举例了,我自己也是去网上查的):
Private Sub IE_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    MsgBox URL, vbInformation, "您好,IE为您服务。"
End Sub

编写完所有代码后,即可生成DLL,名字任意。(如:MYBHO.DLL)

第五步——注册BHO
1.将生成的DLL拖入regsvr32.exe,提示注册成功。(regsvr32.exe在windows\system32下)
2.开始菜单——运行——REGEDIT(打开注册表编辑器)。
3.在注册表编辑器中,打开HKEY_CLASSES_ROOT\CLSID。然后查找"MYBHO"。
4.找到后记下MYBHO对应的那一长串GUID.
5.打开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects 新建项,项的名称就是这个GUID。

第六步
全部工作完成了,现在打开IE浏览器,可以看看效果。

点击下载示例

附注

还有几点需要说明:
1.可以在 ie的"工具(T)"--"管理加载项下",启用/禁用你的插件或者直接到注册表的HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\下删除相应dll的clisd即可.
2.如果其它工程需要引用IObjectWithSiteTLB.tlb,先在注册表将其uuid(CF9D9B76-EC4B-470D-99DC-AEC6F36A9261)删除(反注册)。否则会无法引用。
(删除方法:可以再注册表中搜索IObjectWithSiteTLB.tlb。应该是在tHKEY_CLASSES_ROOT\TypeLib下面)

参考文献

1.《浅谈用vb写bho(浏览器辅助对象)》 http://blog.csdn.net/sx1989827/archive/2009/01/31/3855996.aspx 作者:sx1989827
2.《vb6下手把手教你做bho插件》 http://hi.baidu.com/itworld_boss/blog/item/f87df4d4d54be602a18bb70e.html 作者:itworld_boss

评论: 0 | 引用: 0 | 查看次数: 6079
发表评论
登录后再发表评论!