vb6下手把手教你做bho插件
vb6下手把手教你做bho插件 你好欢迎你来看我写的文章,我想写的是如何让一个初级的vb爱好者简单的学会做bho插件,所以我会搞的很烦琐,很细致,您不要不耐烦就好。对于理论,基本靠后,因为我也不清楚。我们只要知道在何处修改代码能满足我们的要求就可以了。 第一节 工具准备 vb6.0你肯定安装了吧另外注意安装的光盘里有一个目录,在我的电脑里是F\VB6.0\COMMON\TOOLS\VB\UNSUPPRT\TYPLIB,这个目录里有一个文件MKTYPLIB,是用来生成库文件的。找到,备用。如果你嫌麻烦,可以在我这里下载。相关附件 再就是在你的操作系统目录下有一个systm32目录,在里面有一个文件,名字是regsvr32,是用来注册组件的。 这两个文件都可以在dos下执行,带一些参数去执行。windows下执行的时候,会出来一个简单的向导,告诉你如何使用。最简便的方法是把他们同你要处理的文件拷贝到一个目录下,然后把需要处理的文件拖拉到他们的图标上,就ok了。 第二节 生成库文件IObjectWithSiteTLB.tlb 新建一个文本文件,把下面的代码复制进去 [ uuidCF9D9B76-EC4B-470D-99DC-AEC6F36A9261, helpstringVB IObjectWithSite Interface, version1.0 ] library IObjectWithSiteTLB { importlibstdole2.tlb; typedef [public] long GUIDPtr; typedef [public] long VOIDPtr; [ uuid00000000-0000-0000-C000-000000000046, odl ] interface IUnknownVB { HRESULT QueryInterface [in] GUIDPtr priid, [out] VOIDPtr *pvObj ; long AddRef; long Release; } [ uuidFC4801A3-2BA9-11CF-A229-00AA003D7352, odl ] interface IObjectWithSiteIUnknown { typedef IObjectWithSite *LPOBJECTWITHSITE; HRESULT SetSite[in] IUnknownVB* pSite; HRESULT GetSite[in] GUIDPtr priid, [in, out] VOIDPtr* ppvObj; } } 另存为IObjectWithSiteTLB.odl ,注意把全名写在文件名里,保存类型选所有文件。如下图 然后在资源管理器里,把这个IObjectWithSiteTLB.odl拖到 MKTYPLIB.上,注意看,自动生成了我们要用的文件IObjectWithSiteTLB.tlb,记下他的位置。 第三节 建立dll工程 打开vb6.0 --新建一个工程,类型为activeX dll 。 参看下图 把下面的代码复制进去,能理解的好,不能理解的就当是黑盒子。 Implements IObjectWithSiteTLB.IObjectWithSite Dim WithEvents IE As InternetExplorer Dim M_Site As IUnknownVB Private Sub IObjectWithSite_GetSiteByVal Priid As IObjectWithSiteTLB.GUIDPtr, PPVobj As IObjectWithSiteTLB.VOIDPtr M_Site.QueryInterface Priid, PPVobj End Sub Private Sub IObjectWithSite_SetSiteByVal 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_DocumentCompleteByVal pDisp As Object, URL As Variant 獍硯唠扶湉潦浲瑡潩尠海蓝港湾 End Sub 意思是 浏览器每次浏览完成后,....。不说了,大家都看得懂,再说要挨骂了。 第六节 测试插件 生成bho1010.dll ,当然你知道名字是你自己来取的。 在资源管理器你把bho1010.dll 拖拉到regsvr32.身上,显示注册成功。 运行regedit. 在注册表里搜索bho1010.dll ,你会在HKEY_CLASSES_ROOT\CLSID中看到注册组件bho1010.dll 的GUID。然后将这个GUID拷贝下来,然后在注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows \CurrentVersion\Explorer\Browser Helper Objects 下创建一个新项,项的名称就是这个GUID。 搞定以后,打开IE,看看效果出现了吗 修改的时候,只要关闭了 ie,