用findwindows只能得到顶级的那个窗口句柄,用什么方法可以得到每一个窗口句柄阿?
解决方案 »
- msflexgrid 多选
- VB查询多条记录为什么这样慢!1
- 控件的属性名称及值放在数据库里,如何设置控件属性???
- 求VB中实现动态多维数组的方法,数组其中一维固定
- True DBGrid Pro 8.0 在win7家庭版下面,表格格式显示不正常~~
- 使用Winsock Control 出错:Socket is non-blocking and the specified operation will block.
- 如何打开文本文件查找指定字副窜的位置
- vb有没有声音控件?
- 请问为什么我的vb中文版装上去有的地方的字体会出现一种看不懂得字体
- 如何用VB(不是VBA)实现 Unix格式的TXT到Dos格式转换
- 请问,我用GetMenu函数得到一个窗口的菜单句柄,但为什么用IsMenu函数进行判断却返回0
- 如何获取操作系统的语言
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
说明
在窗口列表中寻找与指定条件相符的第一个子窗口
返回值
Long,找到的窗口的句柄。如未找到相符窗口,则返回零。会设置GetLastError
参数表
参数 类型及说明
hWnd1 Long,在其中查找子的父窗口。如设为零,表示使用桌面窗口(通常说的顶级窗口都被认为是桌面的子窗口,所以也会对它们进行查找)
hWnd2 Long,从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索
lpsz1 String,欲搜索的类名。零表示忽略
lpsz2 String,欲搜索的类名。零表示忽略 ==================================
用这个,可以接着上一次找到的接着找
Private Sub Command1_Click()
Dim a As String
Dim b As String
a = FindWindow(vbNullString, "计算器")
MsgBox a
b = FindWindowEx(a, 0&, 0&, 0&)
MsgBox b
End Sub
这个问题只有ENUMwindows来找,在回调函数里做标题匹配。
如果是子窗体就用enumchildwindows,其他操作基本一样,获取已知句柄的窗口标题用GetWindowText
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As Long, ByVal lpsz2 As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As String) As LongPrivate Sub Form_Load() Dim hFirst As Long, hNext As Long
Dim strTitle As String
strTitle = "计算器"
hFirst = FindWindow(0&, strTitle)
If hFirst = 0 Then Exit Sub
MsgBox "First Found"
hNext = hFirst
Do
hNext = FindWindowEx(0&, hNext, 0&, strTitle)
If hNext = 0 Then Exit Do
MsgBox "Another Found"
Loop
End Sub
Option Explicit
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Sub Form_Load()
Dim FindDesk As Long, FindNotepad As Long, More As Long, Count As Integer
FindDesk& = FindWindow("Notepad", vbNullString)
If FindDesk <> 0 Then
MsgBox "第一个找到 " & Hex(FindDesk)
Count = 1
End If
More = FindDesk
Do While More <> 0
More = FindWindowEx(0&, More, "Notepad", vbNullString)
If More = 0 Then Exit Do
Count = Count + 1
MsgBox "第" & Count & "个找到 " & Hex(More)
Loop
End Sub