加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

VB开发BHO插件的方法

发布时间:2020-12-17 08:17:46 所属栏目:百科 来源:网络整理
导读:1.找出VB安装文件的一个东西 F:VB6.0COMMONTOOLSVBUNSUPPRTTYPLIB,这个目录里有一个文件MKTYPLIB是用来生成库文件的。 复制到一个新建文件夹备用 2.新建一个文本文件,把下面的代码复制进去: [ uuid(CF9D9B76-EC4B-470D-99DC-AEC6F36A9261), helpstr
1.找出VB安装文件的一个东西
F:VB6.0COMMONTOOLSVBUNSUPPRTTYPLIB,这个目录里有一个文件MKTYPLIB是用来生成库文件的。 复制到一个新建文件夹备用

2.新建一个文本文件,把下面的代码复制进去:

[
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);
}
}

另存为:IObjectWithSiteTLB.odl ,注意扩展名

把这个IObjectWithSiteTLB.odl拖到 MKTYPLIB.exe上,注意看,自动生成了我们要用的文件IObjectWithSiteTLB.tlb,

建立dll工程

打开vb6.0 --新建一个activeX dll 工程,


把下面的代码复制进去,

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


添加引用

在“工程”--“引用”里,通过浏览引用我们生成的IObjectWithSiteTLB.tlb
再次添加一个引用:microsoft internet controls

在工程中使用以下代码

Private Sub IE_DocumentComplete(ByVal pDisp As Object,URL As Variant)
MsgBox URL,vbInformation,"baidu for u"
End Sub

点击文件 . 生成生成bho1010.dll ,当然你知道名字是你自己来取的

在你的操作系统目录下有一个systm32目录,在里面有一个exe文件,名字是regsvr32,是用来注册组件的。

在资源管理器你把bho1010.dll 拖拉到regsvr32.exe身上,显示注册成功。

运行regedit.exe 在注册表里搜索bho1010.dll,你会在HKEY_CLASSES_ROOTCLSID中看到注册组件bho1010.dll 的GUID。然后将这个GUID拷贝下来,然后在注册表
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerBrowser Helper Objects

下创建一个新项,项的名称就是这个GUID。 搞定以后,打开IE,看看效果出现了吗?


修改的时候,只要关闭了 ie,重新生成bho1010.dll 文件就可以。

当然,你可以在 ie的“工具(T)”--"管理加载项下",启用/禁用 你的插件

以上的注册步骤可以通过程序来自动实现


在vb6里新建一个exe工程,引用windows script host object model对象,和TypeLib Information (TLBINFO32.dll)

然后编写以下代码:

Dim wsh As New WshShell
Dim ta As New TLI.TLIApplication,ti As TLI.TypeLibInfo,tc As TLI.CoClassInfo
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long,ByVal bInheritHandle As Long,ByVal dwProcessId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long,ByVal dwMilliseconds As Long) As Long

Private Const PROCESS_ALL_ACCESS = &H1F0FFF
Private Sub Form_Load()
On Error Resume Next
Me.Visible = False
Dim cl As String,pid As Long,h As Long
cl = Command
pid = Shell("cmd /c regsvr32 /s " + cl,vbHide)
h = OpenProcess(PROCESS_ALL_ACCESS,False,pid)
WaitForSingleObject h,-1
cl = Replace(cl,"""","")
Set ti = ta.TypeLibInfoFromFile(cl)
Dim clisd As String
For Each tc In ti.CoClasses
clisd = tc.Guid
wsh.RegWrite "HKLMSOFTWAREMicrosoftWindowsCurrentVersionExplorerBrowser Helper Objects" + clisd + "",Null
Next
MsgBox "complete"
End
End Sub
代码都是关于com的调用,很好理解,编译成exe,使用的时候只需将dll文件拖到这个exe上,它便会为你的dll自动注册成bho,然后你再打开浏览器就行了,很方便吧!

当你想删除这个bho的时候,只点击 浏览器工具栏里的 工具-----管理加载项-----启用或禁用加载项,再里面找到你要禁用的bho,点禁用即可.或者直接到注册表的HKLMSOFTWAREMicrosoftWindowsCurrentVersionExplorerBrowser Helper Objects下删除相应dll的clisd即可.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读