你好!欢迎你来看我写的文章,我想写的是如何让一个初级的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,写图片地址
第一节 工具准备
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,写图片地址