VB怎么做浏览器插件?VB怎么做BHO插件

VB怎么做浏览器插件?VB怎么做BHO插件?VB开发Browser Helper Object
2007-10-15 16:38
你好!欢迎你来看我写的文章,我想写的是如何让一个初级的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,写图片地址

评论: 102 | 引用: 0 | 查看次数: 10500
Shelby[2017-04-28 07:58 PM | | Mail To:shelbyseiler@gmail.com | 23.92.114.89 | del | 通过审核 | 回复回复]
[此评论正在审核中,只有博主及评论作者可见]
Hector[2017-04-20 03:25 PM | | Mail To:hectorsolis@arcor.de | 162.212.173.92 | del | 通过审核 | 回复回复]
[此评论正在审核中,只有博主及评论作者可见]
Tam[2017-04-04 07:07 AM | | Mail To:tamlarry@googlemail.com | 23.92.115.234 | del | 通过审核 | 回复回复]
[此评论正在审核中,只有博主及评论作者可见]
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 关闭 | [img]标签 关闭