Option Explicit '单击按钮 , 找到所有ie窗口的句柄, 显示在listbox内, 单击listbox关闭所选窗口: '一个按钮 , 一个listbox: Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long Private Const GW_HWNDNEXT = 2 Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Const WM_CLOSE = &H10 Dim mwnd() As Long Private Sub Command1_Click() List1.Clear Dim k As Long k = 0 Dim mhwnd As Long Dim cname As String * 260 Dim classname As String mhwnd = FindWindow("IEFrame", vbNullString) ReDim Preserve mwnd(k) mwnd(k) = mhwnd Dim s As String * 260 GetWindowText mhwnd, s, 260 Dim ss As String ss = Left(s, InStr(1, s, Chr(0)) - 1) ss = "hwnd=" + CStr(mhwnd) + " 标题为:" + ss List1.AddItem ss If mhwnd <> 0 Then Do While mhwnd <> 0 mhwnd = GetNextWindow(mhwnd, GW_HWNDNEXT) GetClassName mhwnd, cname, 260 classname = Left(cname, InStr(1, cname, Chr(0)) - 1) If UCase(classname) = "IEFRAME" Then k = k + 1 ReDim Preserve mwnd(k) mwnd(k) = mhwnd GetWindowText mhwnd, s, 260 ss = Left(s, InStr(1, s, Chr(0)) - 1) ss = "hwnd=" + CStr(mhwnd) + " 标题为:" + ss List1.AddItem ss End If Loop End If End SubPrivate Sub List1_Click() Dim i As Long i = List1.ListIndex If mwnd(i) <> 0 Then PostMessage mwnd(i), WM_CLOSE, 0&, 0& mwnd(i) = 0 Else MsgBox "窗口已经关闭,不用再点击了" End If End Sub
添加按钮,文本,文本的text是打开ie的标题名称 Private Sub CmdEndTask_Click() TerminateTask TaskText.Text End Sub模块 Option ExplicitDeclare Function EnumWindows Lib "user32" (ByVal wndenmprc As Long, ByVal lParam As Long) As Long Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch 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 Public Const WM_CLOSE = &H10Private Target As String ' Check a returned task to see if we should ' kill it. Public Function EnumCallback(ByVal app_hWnd As Long, ByVal param As Long) As Long Dim buf As String * 256 Dim title As String Dim length As Long ' Get the window's title. length = GetWindowText(app_hWnd, buf, Len(buf)) title = Left$(buf, length) ' See if this is the target window. If InStr(title, Target) <> 0 Then ' Kill the window. SendMessage app_hWnd, WM_CLOSE, 0, 0 End If
' Continue searching. EnumCallback = 1 End Function' Ask Windows for the list of tasks. Public Sub TerminateTask(app_name As String) Target = app_name EnumWindows AddressOf EnumCallback, 0 End Sub
' 另外一种思路。 ' 在窗体上放一个CommandButton和一个ListBox。 ' 启动时ListBox中会显示出所有已打开的IE窗口,选中后单击CommandButton关闭。Option Explicit Dim IEWindow As New SHDocVw.ShellWindows Dim Browser As New SHDocVw.WebBrowserPrivate Sub Command1_Click() Set Browser = IEWindow.Item(List1.ListIndex) Browser.Quit End SubPrivate Sub Form_Load() Dim i As Long For i = 0 To IEWindow.Count Set Browser = IEWindow.Item(i) List1.AddItem Browser.LocationName Next i End Sub
没有上面各位讲得那么复杂 引用一下 microsoft internet controls 下面是关闭所有IE窗体的代码Dim dWinFolder As New ShellWindows Dim eventIE As SHDocVw.InternetExplorer Dim objIE As Object
For Each objIE In dWinFolder Set eventIE = objIE '这句前面可以插入一句对IE窗体标题的判断之类的语 '句进行有选择的关闭窗体 eventIE.Quit Next
补充一下,我的那段代码里也要在菜单中选工程--引用--选中Microsoft Internet Controls。
请问用VB编写的话,完整的代码怎么写,关闭所有打开的IE窗口。
我上面给你的代码粘铁到一个按钮的click事件里面,并且在工程中引用microsoft internet controls 就可以在点击按钮的时候关闭所有IE窗口 引用的操作: 菜单中选工程--引用--选中Microsoft Internet Controls。
'单击按钮 , 找到所有ie窗口的句柄, 显示在listbox内, 单击listbox关闭所选窗口:
'一个按钮 , 一个listbox:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long
Private Const GW_HWNDNEXT = 2
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPrivate Const WM_CLOSE = &H10
Dim mwnd() As Long
Private Sub Command1_Click()
List1.Clear
Dim k As Long
k = 0
Dim mhwnd As Long
Dim cname As String * 260
Dim classname As String
mhwnd = FindWindow("IEFrame", vbNullString)
ReDim Preserve mwnd(k)
mwnd(k) = mhwnd
Dim s As String * 260
GetWindowText mhwnd, s, 260
Dim ss As String
ss = Left(s, InStr(1, s, Chr(0)) - 1)
ss = "hwnd=" + CStr(mhwnd) + " 标题为:" + ss
List1.AddItem ss
If mhwnd <> 0 Then
Do While mhwnd <> 0
mhwnd = GetNextWindow(mhwnd, GW_HWNDNEXT)
GetClassName mhwnd, cname, 260
classname = Left(cname, InStr(1, cname, Chr(0)) - 1)
If UCase(classname) = "IEFRAME" Then
k = k + 1
ReDim Preserve mwnd(k)
mwnd(k) = mhwnd
GetWindowText mhwnd, s, 260
ss = Left(s, InStr(1, s, Chr(0)) - 1)
ss = "hwnd=" + CStr(mhwnd) + " 标题为:" + ss
List1.AddItem ss
End If
Loop
End If
End SubPrivate Sub List1_Click()
Dim i As Long
i = List1.ListIndex
If mwnd(i) <> 0 Then
PostMessage mwnd(i), WM_CLOSE, 0&, 0&
mwnd(i) = 0
Else
MsgBox "窗口已经关闭,不用再点击了"
End If
End Sub
Private Sub CmdEndTask_Click()
TerminateTask TaskText.Text
End Sub模块
Option ExplicitDeclare Function EnumWindows Lib "user32" (ByVal wndenmprc As Long, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch 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
Public Const WM_CLOSE = &H10Private Target As String
' Check a returned task to see if we should
' kill it.
Public Function EnumCallback(ByVal app_hWnd As Long, ByVal param As Long) As Long
Dim buf As String * 256
Dim title As String
Dim length As Long ' Get the window's title.
length = GetWindowText(app_hWnd, buf, Len(buf))
title = Left$(buf, length) ' See if this is the target window.
If InStr(title, Target) <> 0 Then
' Kill the window.
SendMessage app_hWnd, WM_CLOSE, 0, 0
End If
' Continue searching.
EnumCallback = 1
End Function' Ask Windows for the list of tasks.
Public Sub TerminateTask(app_name As String)
Target = app_name
EnumWindows AddressOf EnumCallback, 0
End Sub
' 在窗体上放一个CommandButton和一个ListBox。
' 启动时ListBox中会显示出所有已打开的IE窗口,选中后单击CommandButton关闭。Option Explicit
Dim IEWindow As New SHDocVw.ShellWindows
Dim Browser As New SHDocVw.WebBrowserPrivate Sub Command1_Click()
Set Browser = IEWindow.Item(List1.ListIndex)
Browser.Quit
End SubPrivate Sub Form_Load()
Dim i As Long
For i = 0 To IEWindow.Count
Set Browser = IEWindow.Item(i)
List1.AddItem Browser.LocationName
Next i
End Sub
引用一下 microsoft internet controls
下面是关闭所有IE窗体的代码Dim dWinFolder As New ShellWindows
Dim eventIE As SHDocVw.InternetExplorer
Dim objIE As Object
For Each objIE In dWinFolder
Set eventIE = objIE '这句前面可以插入一句对IE窗体标题的判断之类的语
'句进行有选择的关闭窗体
eventIE.Quit
Next
引用的操作:
菜单中选工程--引用--选中Microsoft Internet Controls。