vb6下手把手教你做bho插件

你好!欢迎你来看我写的文章,我想写的是如何让一个初级的vb爱好者简单的学会做bho插件,所以我会搞的很烦琐,很细致,您不要不耐烦就好。对于理论,基本靠后,因为我也不清楚。我们只要知道在何处修改代码能满足我们的要求就可以了。

第一节 工具准备

vb6.0你肯定安装了吧?另外注意安装的光盘里有一个目录,在我的电脑里是F:\VB6.0\COMMON\TOOLS\VB\UNSUPPRT\TYPLIB,这个目录里有一个文件MKTYPLIB,是用来生成库文件的。找到,备用。如果你嫌麻烦,可以在我这里下载。相关附件

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

这两个文件都可以在dos下执行,带一些参数去执行。windows下执行的时候,会出来一个简单的向导,告诉你如何使用。最简便的方法是把他们同你要处理的文件拷贝到一个目录下,然后把需要处理的文件拖拉到他们的图标上,就ok了。


第二节 生成库文件IObjectWithSiteTLB.tlb

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


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


第四节 添加引用

你马上可以运行一下,结果当然会出错。是不是这个提示?





这个类型的定义在我们前边生成的那个库里,我们没有告诉vb,她当然找不到了。在“工程”--“引用”里,通过浏览引用我们生成的IObjectWithSiteTLB.tlb   ,再次运行,这个错误不再出现了。但是会出现另外一个错误,这是因为另外的一个类型定义Dim WithEvents IE As InternetExplorer,找不见。我想你应该知道要加入一个什么引用吧? (microsoft internet controls)。好了,以上都是死套套,下面我们能自由活动了。

第五节 webbrowser编程

用过webbrowser 吧? 也就是microsoft internet controls里定义的浏览器控件。用过的话,下面的内容就好发挥了。

现在,我们只要针对ie的各个事件编写代码就可以了。参看下图:
我们先写一个简单的,测试有效果后再整复杂点。我写个:

Private Sub IE_DocumentComplete(ByVal pDisp As Object, URL As Variant)
MsgBox URL, vbInformation, "海蓝港湾"
End Sub

意思是 浏览器每次浏览完成后,....。不说了,大家都看得懂,再说要挨骂了。

第六节 测试插件

生成bho1010.dll ,当然你知道名字是你自己来取的。

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows

\CurrentVersion\Explorer\Browser Helper Objects 



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

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

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


第七节 后记

似乎你很失望,如此烦琐。其实成熟后,这些都可以让程序来完成。

我的摆渡铁吧签名 也仅仅是加了下面的代码:

Private Sub IE_DocumentComplete(ByVal pDisp As Object, URL As Variant)

On Error Resume Next '不理会错误

If InStr(1, URL, " http://post.baidu.com/f? ") > 0 Then   '如果是摆渡的铁吧就开始工作
     Dim temp As String
     temp = vbLf + vbLf + vbLf + vbLf + vbLf + vbLf + "=======================================" + vbLf
     temp = temp & "在这里了===》 http://www.9b01.net/zzjwl/ShowPost.asp?id=3541 " + vbLf + "=======================================" '这个地方就是签名了,改进后可以从注册表存取
     m_objIE.document.getElementsByName("str1")(0).Value = " http://www.9b01.net/zzjwl/images/logo.gif " '摆渡铁吧里图片的输入名称是str1,写图片地址
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值