本帖最后由 wq1282 于 2010-12-24 16:49:11 编辑

解决方案 »

  1.   

    使用BHO,在BeforeNavigate2事件里判断URL,如果是要拦截的URL,则设置Cancel为True,并Navigate2到新的URL上。
      

  2.   

    不使用BHO也可以拦截IE事件,但效果不太好,可以参考《不使用BHO监控IE窗口事件
      

  3.   

    以下代码实现在地址栏里输入www.baidu.com自动转换www.google.com.hk:
    1、引用“Micrsoft Internet Controls”和“Microsoft HTML Object Library”。注意是引用而不是添加“Micrsoft Internet Controls”部件。
    2、添加一个类,命名为IeEvent,代码如下:Public WithEvents m_objIE As InternetExplorerPrivate Sub Class_Terminate()
        Set m_objIE = Nothing
    End Sub
      
    Private 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)
        If InStr(URL, "www.baidu.com") > 0 Then
            Cancel = True
            m_objIE.Navigate2 "http://www.google.com.hk"
        End If
    End SubPrivate Sub m_objIE_OnQuit()
        Set m_objIE = Nothing
    End Sub3、窗口代码里如下:Dim WithEvents m_shWindows As ShellWindows
    Dim m_ieEvent() As IeEvent
    Dim m_nIeCount As LongPrivate Sub Form_Load()
        Dim objIE As InternetExplorer
           
        Set m_shWindows = New ShellWindows
        For Each objIE In m_shWindows
            If InStr(objIE.FullName, "\iexplore.exe") Then
                ReDim Preserve m_ieEvent(m_nIeCount)
                Set m_ieEvent(m_nIeCount) = New IeEvent
                Set m_ieEvent(m_nIeCount).m_objIE = objIE
                m_nIeCount = m_nIeCount + 1
            End If
        Next
    End Sub
      
    Private Sub Form_Unload(Cancel As Integer)
        Dim i As Long
           
        For i = 0 To m_nIeCount - 1
            Set m_ieEvent(i) = Nothing
        Next
        Erase m_ieEvent
    End Sub
      
    Private Sub m_shWindows_WindowRegistered(ByVal lCookie As Long)
        Dim objIE As InternetExplorer
            
        Set objIE = m_shWindows(m_shWindows.Count - 1)
        If InStr(objIE.FullName, "\iexplore.exe") = 0 Then Exit Sub
        ReDim Preserve m_ieEvent(m_nIeCount)
        Set m_ieEvent(m_nIeCount) = New IeEvent
        Set m_ieEvent(m_nIeCount).m_objIE = objIE
        m_nIeCount = m_nIeCount + 1
    End Sub
      
    Private Sub m_shWindows_WindowRevoked(ByVal lCookie As Long)
        Dim i As Long
        Dim blnFound As Boolean
      
        For i = 0 To m_nIeCount - 1
            If m_ieEvent(i).m_objIE Is Nothing Then blnFound = True
            If blnFound Then
                If i = m_nIeCount - 1 Then Exit For
                Set m_ieEvent(i) = m_ieEvent(i + 1)
            End If
        Next
        m_nIeCount = m_nIeCount - 1
        If m_nIeCount > 0 Then ReDim Preserve m_ieEvent(m_nIeCount - 1)
    End Sub
      

  4.   

    嗯,测试了,很方便,确实有效果
    能不能让已经打开了网页的Internet Explorer_Server控件页面地址跳转呢?
    不在IE下没有地址栏的情况,因为问题是为了把事情描述清楚,所以用IE来做示例。
      

  5.   

    是这样的,现在很多的软件程序都有Internet Explorer_Server控件的广告界面,我准备通过这种方式将它屏蔽或跳转到另外的页面上去。还望您不吝赐教
      

  6.   

    ' 引用ieframe.dll
    Private Sub Command1_Click()
        Dim w
        Dim s As New SHDocVw.ShellWindows
        For Each w In s
            If InStr (w.LocationURL, "baidu.com" ) > 0 Then
                MsgBox TypeName (w)
                w.Navigate ( "http://127.0.0.1/" )
            End If
        Next
    End Sub 
    用定时器没隔一定的时间执行一下上面的代码。参照:http://blog.csdn.net/sysdzw/archive/2009/09/23/4583694.aspx