我想写一个程序监控IE浏览的网址,如果是特定的网址就不让他浏览

解决方案 »

  1.   

    实现对IE的监控需要实现下面的步骤:
    创建一个COM组件,这个组件需要实现IObjectWithSite接口。
    注册这个组件
    将这个组件的GUID注册到:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects
    下,这样IE在启动时就可以装载这个组件,然后获得组件的IObjectWithSite接口并调用其功能。实现方法如下:
    首先需要获得IObjectWithSite接口的定义,你可以从http://www.applevb.com/lib/tl_ole.zip 下载这个接口定义的tlb文件,这个压缩包中的olelib.tlb就包含了接口定义。然后创建一个ActiveX DLL工程,在工程中引用这个tlb文件,并且引用Microsoft HTML Object Library(MSHTML.DLL)和Microsoft Internet Controls(Shdocvw.dll)。然后在工程的class1中写入如下代码:
    ‘Class1.bas
    Option Explicit' 实现IObjectWithSite接口来获得IE对象
    Implements olelib.IObjectWithSitePrivate WithEvents m_objIE As InternetExplorerPrivate Sub IObjectWithSite_GetSite(riid As UUID, ppvSite As IUnknown)
        Dim objUnk As olelib.IUnknown   '获得m_objIE IUnkown接口
       Set objUnk = m_objIE
       
       '返回所需要的接口
       objUnk.QueryInterface riid, ppvSite
    End SubPrivate Sub IObjectWithSite_SetSite(ByVal pUnkSite As IUnknown)
        '获得IE接口
        Set m_objIE = pUnkSite
    End SubPrivate Sub m_objIE_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
        '如果浏览的网站不是applevb.com则不许浏览
        If (InStr(URL, "applevb.com") = 0) Then
            MsgBox "You can only visit applevb!"
            Cancel = True
        End If
    End Sub将这个工程编译为:prjBHO.dll。编译工程后,可以通过调用regsvr32 prjBHO.dll注册这个组件,组件注册了以后,就会在注册表HKEY_CLASSES_ROOT\CLSID中注册组件的GUID。在注册表中用prjBHO.dll做关键字就可以查找到prjBHO.dll注册的GUID,然后将这个GUID拷贝下来,然后在注册表
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects
    下创建一个新项,项的名称就是这个GUID。搞定以后,打开IE,这时你的IE就只能浏览 applevb.com了 ^_^
      

  2.   

    在你注册了这个组件后,在IE启动以后会寻找
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects
    下面注册的组件,然后获得这些组件的IObjectWithSite接口,如果组件实现了这个接口的话,就会调用接口的SetSite方法,并且把自身作为一个IUnknown接口参数pUnkSite传递过去,你在这个方法中就可以保存这个接口,并且响应接口方法。
    关于InternetExplorer对象,你可以在MSDN中查找一下InternetExplorer Object的帮助。