当前位置:首页 > VB

VB BHO

canca17年前 (2009-04-02)VB590

以前一直不知道有BHO这个名字,但一直对IE中的"加载项"编程念念不忘. 前不久一网友让我做一个小程序,功能就是替换网页中指定的内容,但是不启动软件,直接用IE看的话就是原文.感觉有点意思的,因为不知道原理,网上找了一下BHO这个名词自然就落入眼底了.

BHO(浏览器辅助对象)用于IE的加载项中,可以对IE的事件进行拦截编程(可以是IE上的工具条,或者按钮或者不可见插件).BHO的定义位于注册表"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\" 下,当IE启动时就加载了该项下所有子项.通过IObjectWithSite接口同前面的工具条扩展一样可以用来获得浏览器的接口,而IDispatch接口,则被用来监听浏览器的事件。

在VB中IObjectWithSite需要用工具生成然后再VB工程中引用,还要添加MSHTML及SHDOCWV两个库,最后代码如下,替换一个网页中第一个链接的内容

 

 

 Implements IObjectWithSiteTLB.IObjectWithSite
Dim WithEvents m_ie As InternetExplorer
Attribute m_ie.VB_VarHelpID = -1
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 m_ie = pSite
End Sub

Private Sub m_ie_DocumentComplete(ByVal pDisp As Object, URL As Variant)
    On Error Resume Next
   
    'Dim HTMLDoc As MSHTML.HTMLDocument
    If m_ie.LocationURL = URL Then
       
        m_ie.document.links(0).innerHTML = "这里是要替换的内容"
       
       
        MsgBox "替换完成" & URL
   
    End If
   
End Sub

 

这样一个BHO就做了,编译成DLL,然后注册,把注册后的CLSD编号插入到前面说的IE启动时BHO的子项中.新开一个新的窗口,当页面加载完之后这个程序就会替换页面中的指定内容了.

 

      原理弄清楚就很容易了,除了拦截页面的加载事件外还有很多事件可以拦截,从而进行控制,最重要的就是HTMLDocument对象,对整个页面的元素都可以进行读写操作.(比如插入一段小广告什么的,:))

扫描二维码推送至手机访问。

版权声明:本文由Ant.Master's Blog发布,如需转载请注明出处。

本文链接:https://iant.work/post/332.html

标签: VB
分享给朋友:

“VB BHO” 的相关文章

我的网友第一个bho作品

转自:http://hi.baidu.com/zzjwl/blog/item/60ecf8de3bf4bf5c95ee3725.html 去年用vb做bho,没有成功,最近偶然到网络搜索,有那么多资料。边看边做,终于ok! Implements IObjectWithSiteTLB.IObjectW…

VB IE控制

VERSION 5.00Begin VB.UserControl uctlIe    ClientHeight    =   450   ClientLeft    &n…

vb制作IE插件

IE Tool Band 可以实现自定义工具栏.但实现比较复杂. 其实从IE5开始便允许我们向工具栏添加自己的按钮,其本质就是修改注册表,添加创建此按钮所需的信息。 实现步骤: 1.创建此按钮的GUID(globally unique identifier) 你可以通过Visual ...…

File not found:'C:\WINDOWS\system32\ieframe.dll\1'

Open your start menu > Selecr 'Run'Type regedit, then hit enterThe registry editor will open.On the top menu bar, click Edit, then Find and search…

CreateDesktop实现虚拟桌面

CreateDesktop实现虚拟桌面

'Module1 引用: Public Declare Function GetThreadDesktop Lib "user32" (ByVal dwThread As Long) As Long 'Public Declare Function CreateDesktop Lib "user3…

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。