首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

怎样判断是否打开IE解决思路

2012-02-27 
怎样判断是否打开IE怎样判断是否打开IE,怎样知道他连接的什么网页[解决办法]VB code程序界面:装载1个Com

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


[解决办法]

VB code
'程序界面:'装载1个CommandButton(Caption为取得IE地址栏的地址)、1个ListBox控件,其他属性全部为默认。'Form1.frm 文件'--------------Option ExplicitPrivate 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 = 5Const GW_HWNDNEXT = 2Const WM_GETTEXT = &HDConst WM_GETTEXTLENGTH = &HE'遍查主窗口Public Function EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long) As BooleanDim buf As String * 1024Dim length As LongDim 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 = 1End Function'遍查子窗口Public Function GetZiWin(window_hwnd As Long) As StringDim buf As StringDim buflen As LongDim child_hwnd As LongDim children() As LongDim num_children As IntegerDim 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 iEnd FunctionPublic Function GetWinText(window_hwnd As Long) As String '取得子窗口的值Dim txtlen As LongDim 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 GetWinTextEnd Function
[解决办法]
关键的都有了 不会要全部都给你写上吧 
加个定时器 之后设置个快捷键隐藏和显示程序 再判断一下 List1里的网址是否和你要求的一样就行拉 .不一样就杀掉ie进程
[解决办法]
用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
[解决办法]

VB code
'刚好这二天正在研究这类问题'引用Microsoft Internet controls,一定是引用,不是加控件Dim WithEvents eventIE As WebBrowser_V1Dim WithEvents dWinFolder As ShellWindowsDim objIE As ObjectPrivate Sub Command1_Click()Dim i As IntegerDim S As StringDim objIE As Object  Set dWinFolder = New ShellWindowsFor Each objIE In dWinFolderIf InStr(1, objIE.FullName, "IEXPLORE.EXE", vbTextCompare) <> 0 Then Set objDoc = objIE.Document  i = i + 1S = S & i & "、" & objIE.LocationName & vbNewLine           End If  Next  If i = 0 Then MsgBox "IE没打开!" Else MsgBox "IE打开了" & i & "个网页:" & vbNewLine & S End If End Sub
[解决办法]
你那样判断不行的的,应该这样

应该有现成的工具的:

[解决办法]
使用TaskList命令来列出已经运行的进程,查找是否有IE进程。
------解决方案--------------------


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

热点排行