怎样判断是否打开IE,怎样知道他连接的什么网页

解决方案 »

  1.   

    '程序界面:
    '装载1个CommandButton(Caption为取得IE地址栏的地址)、1个ListBox控件,其他属性全部为默认。'Form1.frm 文件
    '--------------
    Option Explicit
    Private Sub Command1_Click()
      List1.Clear
      EnumWindows AddressOf EnumProc, 0
      If List1.ListCount = 0 Then List1.AddItem "没有启动 IE 浏览器"
    End Sub
    'Module1.bas 文件
    '---------------
    Option Explicit
    '相关 API 函数声明
    Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Any, ByVal lParam As Long) _
    As Long '枚举窗口列表中的所有父窗口(顶级和被所有窗口)
    Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, _
    ByVal lpString As String, ByVal cch As Long) As Long '取得指定窗口的司法题
    Public Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal _
    lpClassName As String, ByVal nMaxCount As Long) As Long '为指定的窗口取得类名
    Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long '取得窗口句柄
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal _
    wMsg As Long, ByVal wParam As Long, lParam As Any) As Long '发送消息Const GW_CHILD = 5
    Const GW_HWNDNEXT = 2
    Const WM_GETTEXT = &HD
    Const WM_GETTEXTLENGTH = &HE'遍查主窗口
    Public Function EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long) As Boolean
    Dim buf As String * 1024
    Dim length As Long
    Dim title As String  length = GetWindowText(app_hwnd, buf, Len(buf))
      title = Left$(buf, length)  '判断是否为 IE 浏览器窗口
      If InStr(title, " - Netscape") Or InStr(title, " - Microsoft Internet Explorer") Or InStr(title, "Offline Explorer") Then
        Call GetZiWin(app_hwnd)
      End If
      
      EnumProc = 1
    End Function'遍查子窗口
    Public Function GetZiWin(window_hwnd As Long) As String
    Dim buf As String
    Dim buflen As Long
    Dim child_hwnd As Long
    Dim children() As Long
    Dim num_children As Integer
    Dim i As Integer
       
      buflen = 256
      buf = Space$(buflen - 1)
      buflen = GetClassName(window_hwnd, buf, buflen)
      buf = Left$(buf, buflen) '取得子窗口的类名
      
      If Right(buf, 4) = "Edit" Then '判断是否为地址栏子窗口
        GetZiWin = GetWinText(window_hwnd)
        Exit Function
      End If
       
      num_children = 0
      child_hwnd = GetWindow(window_hwnd, GW_CHILD) '取得第 1 个子窗口的句柄
      Do While child_hwnd <> 0 '如果有子窗口
        num_children = num_children + 1
        ReDim Preserve children(1 To num_children)
        children(num_children) = child_hwnd
        child_hwnd = GetWindow(child_hwnd, GW_HWNDNEXT) '取得下一个兄弟窗口的句柄
      Loop
       
      For i = 1 To num_children
        Call GetZiWin(children(i))
      Next i
    End FunctionPublic Function GetWinText(window_hwnd As Long) As String '取得子窗口的值
    Dim txtlen As Long
    Dim txt As String  '通过 SendMessage 发送 WM_GETTEXT 取得 IE 地址栏的值
      GetWinText = ""
      If window_hwnd = 0 Then Exit Function
       
      txtlen = SendMessage(window_hwnd, WM_GETTEXTLENGTH, 0, 0)
      If txtlen = 0 Then Exit Function
       
      txtlen = txtlen + 1
      txt = Space$(txtlen)
      txtlen = SendMessage(window_hwnd, WM_GETTEXT, txtlen, ByVal txt)
      GetWinText = Left$(txt, txtlen)
      
      Form1.List1.AddItem GetWinText
    End Function
      

  2.   

    我只想知道他打开的是不是我允许打开的网页,如http://community.csdn.net/,http://topic.csdn.net/u/20090728/22/e449b5f3-72ed-4893-9361-a60b0c63a9c3.html,我要知道他的首页是http://www.csdn.net/,允许他打开,
    http://ent.163.com/movie/不是http://www.csdn.net/的子页,我就把自动它关掉,也不许连接到别的网站上去
    该怎么办?
      

  3.   

    定啊,我的意思是在后台运行,ie一打开就监控ie
      

  4.   

    关键的都有了  不会要全部都给你写上吧 
        加个定时器    之后设置个快捷键隐藏和显示程序  再判断一下  List1里的网址是否和你要求的一样就行拉     .不一样就杀掉ie进程   
      

  5.   

    用ShellWindows
    IE浏览器完全控制
        相信现在绝大多数计算机上使用的是IE浏览器。如何通过编程控制IE的操作呢,本文将一步步介绍如何通过VB
    调用IE的对象库来对IE进行控制。
        本文使用的编程工具是VB6英文企业版,浏览器是IE5,以下的代码只能在IE4及以上版本下运行。另外为了能深
    入了解程序代码,最好能安装MSDN。文中的所有对象、函数、事件在其中都可以查到。
        
        一、如何获得Windows中所有打开的浏览器窗口
        首先打开VB,建立一个新工程,点击菜单 Projects | References 项,在Available References 列表中选择
    Microsoft Internet Controls项将Internet对象引用介入到工程中。添加一个ListBox到Form1,然后在Form1中添
    加如下代码:
        Dim dWinFolder As New ShellWindows    Private Sub Form_Load()
            Dim objIE As Object
        
            For Each objIE In dWinFolder
                If InStr(1, objIE.FullName, "IEXPLORE.EXE", vbTextCompare) <> 0 Then
                    List1.AddItem objIE.LocationURL
                End If
            Next
        End Sub
        打开几个浏览器窗口,然后运行程序,可以看到所有浏览窗口中的URL地址都在List1中列了出来。
        上面程序中的ShellWindows对象是描述当前所有打开的“浏览窗口”对象集合的对象,利用For...Each语句可以
    获得其中所有的浏览窗口对象。这是一个WebBrowser对象,在MSDN索引中通过“WebBrowser Object”中可以找到该
    对象的详细介绍
        在ShellWindows中的浏览窗口对象不仅包含IE,还包含Explore窗口(向资源管理器或者“我的电脑”窗口就是
    Explore)。只不过它们的宿主程序一个是IEXPLORE.EXE,一个是EXPLORE.EXE。所以对每一个对象首先根据其FulName
    属性来判断窗口是IE浏览器,如果是,则将该窗口的URL地址列出来。
        通过WebBrowser对象可以获得和设置浏览器窗口中的很多属性,例如窗口大小、工具栏、状态栏状态以及控制
    窗口的浏览等,大家通过MSDN都可以查到。    二、如何得到每一个浏览窗口的内容
        在上面程序的Form1中再添加一个TextBox控件,将MultiLine属性设置为True,然后在List1的Click事件中添加如
    下代码:
        Dim objDoc As Object
        Dim objIE As Object
        
        For Each objIE In dWinFolder
            If objIE.LocationURL = List1.List(List1.ListIndex) Then
                Set objDoc = objIE.Document
            
                For i = 1 To objDoc.All.length - 1
                    If objDoc.All(i).tagname = "BODY" Then
                        Text1.Text = objDoc.All(i).innerText
                    End If
                Next
                Exit For
            End If
        Next
        运行程序,点击ListBox中的一个列表,所对应的浏览器窗口中的文本内容就会显示在TextBox中。
        在上面的程序中,首先根据ListBox中选择的URL获得Webrowser对象,然后根据Document属性获得文档对象。我们知道
    一个页面中包括HEAD、TITLE、BODY部分,页面中还可能包括Applet、Script、连接、表单等,这些在文档中都是一个对象
    在程序中就是循环文档对象下的所有对象,如果对象的名称是“BODY”,说明对象代表HTML文档的正文部分,那么访问对象
    的innerText属性获得文档正文。关于Document对象更详细的信息,大家可以参考MSDN中Webbrowser object帮助中的
    Document属性连接。
        三、响应IE事件
        上面的部分只是介绍了如何访问Webbrowser对象的属性,下面介绍如何监控IE事件。
        在Form1中再添加一个CommandButton。在代码窗口的 [Gengeral]-[Declaration]添加下面的定义:
        Dim WithEvents eventIE As WebBrowser_V1
        这样就在Form1中新添加了一个对象,然后在Command1的Click事件中添加如下代码:
        Dim objIE As Object
        
        For Each objIE In dWinFolder
            If objIE.LocationURL = List1.List(List1.ListIndex) Then
                Set eventIE = objIE
                Command1.Enabled = False
                Text1.Text = ""
                Exit For
            End If
        Next
        在eventIE的NavigateComplete事件中添加如下代码:
        Text1.Text = Text1.Text + Chr(13) + Chr(10) + URL
        在Form的UnLoad事件中添加下面一句代码:
        Set dWinFolder = Nothing
        运行程序,在ListBox中选择一个URL后点击Command1,然后转到与所选项向对应的浏览窗口输入网站地址进行浏览,可以
    看到所浏览过的站点地址在TextBox中一一列出。
        上面的程序实现起来也很简单。首先定义一个可响应事件的Webbrowser对象,然后将它与在ListBox中选择的Webbrowser对
    象联系起来,当浏览器发生变化时,eventIE对象就能响应相应的事件。
        根据IE版本的不同,Webbrowser对象也不同,作者的浏览器是IE5.0,在上面将eventIE定义为WebBrowser_V1运行通过,如
    果你的浏览器版本为4.0的话,可能在执行 Set eventIE = objIE 时,可能产生 Type mistake 错误,这时你可以尝试将
    eventIE定义为:Dim WithEvents eventIE As WebBrowser
      

  6.   

    '刚好这二天正在研究这类问题
    '引用Microsoft Internet controls,一定是引用,不是加控件
    Dim WithEvents eventIE As WebBrowser_V1
    Dim WithEvents dWinFolder As ShellWindows
    Dim objIE As Object
    Private Sub Command1_Click()
    Dim i As Integer
    Dim S As String
    Dim objIE As Object
      Set dWinFolder = New ShellWindows
    For Each objIE In dWinFolder
    If InStr(1, objIE.FullName, "IEXPLORE.EXE", vbTextCompare) <> 0 Then
     Set objDoc = objIE.Document
      i = i + 1
    S = S & i & "、" & objIE.LocationName & vbNewLine
          
         End If
      Next
      If i = 0 Then
     MsgBox "IE没打开!"
     Else
     MsgBox "IE打开了" & i & "个网页:" & vbNewLine & S
     End If
     End Sub
      

  7.   

    使用TaskList命令来列出已经运行的进程,查找是否有IE进程。
      

  8.   

    IE窗口的类名为:IEframe,根据这个类名来枚举。