vb6下手把手教你做bho插件
vb6下手把手教你做bho插件 你好!欢迎你来看我写的文章,我想写的是如何让一个初级的vb爱好者简单的学会做bho插件,所以我会搞的很烦琐,很细致,您不要不耐烦就好。对于理论,基本靠后,因为我也不清楚。我们只要知道在何处修改代码能满足我们的要求就可以了。 第一节 工具准备 vb6.0你肯定安装了吧?另外注意安装的光盘里有一个目录,在我的电脑里是F:\VB6.0\COMMON\TOOLS\VB\UNSUPPRT\TYPLIB,这个目录里有一个文件MKTYPLIB,是用来生成库文件的。找到,备用。如果你嫌麻烦,可以在我这里下载。相关附件 再就是在你的操作系统目录下有一个systm32目录,在里面有一个文件,名字是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.上,注意看,自动生成了我们要用的文件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) 獍?硯唠??扶湉潦浲瑡潩?尠海蓝港湾 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,