根据软件标题枚举该窗口下所有控件句柄和标题
Option ExplicitPrivate Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Const GW_CHILD = 5
Const GW_HWNDNEXT = &H2
Dim HwndVal&
Private Sub Command1_Click()
Call GetHandle("计算器")
End Sub
Public Function GetHandle(Title As String) As Long
Dim Tmp$, hwnd&, lngProcID&
Dim StrTitle As String * 255 '用来存储窗口的标题
HwndVal = FindWindow(vbNullString, Title) 'GetDesktopWindow()'取得桌面窗口
HwndVal = GetWindow(HwndVal, GW_CHILD) '取得桌面窗口的第一个子窗口
List1.Clear
Do While HwndVal <> 0'通过循环枚举所有的窗口
GetWindowText HwndVal, StrTitle, Len(StrTitle)'取得下一个窗口的标题,并写入到列表框中
If Left(StrTitle, 1) <> vbNullChar Then
Tmp = Left(StrTitle, InStr(StrTitle, vbNullChar))
List1.AddItem CStr(HwndVal) & "---" & Tmp
If Left(Tmp, Len(Title)) = Title Then GetHandle = HwndVal
End If
HwndVal = GetWindow(HwndVal, GW_HWNDNEXT)'调用GetWindow函数,来取得下一个窗口
Loop
End Function
GetWindow使用说明
VB声明Declare Function GetWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
说明
获得一个窗口的句柄,该窗口与某源窗口有特定的关系
返回值
Long,由wCmd决定的一个窗口的句柄。如没有找到相符窗口,或者遇到错误,则返回零值。会设置GetLastError
参数表
参数 类型及说明
hwnd Long,源窗口
wCmd Long,指定结果窗口与源窗口的关系,它们建立在下述常数基础上:
GW_CHILD 寻找源窗口的第一个子窗口
GW_HWNDFIRST 为一个源子窗口寻找第一个兄弟(同级)窗口,或寻找第一个顶级窗口
GW_HWNDLAST 为一个源子窗口寻找最后一个兄弟(同级)窗口,或寻找最后一个顶级窗口
GW_HWNDNEXT 为源窗口寻找下一个兄弟窗口
GW_HWNDPREV 为源窗口寻找前一个兄弟窗口
GW_OWNER 寻找窗口的所有者
注解
兄弟或同级是指在整个分级结构中位于同一级别的窗口。如某个窗口有五个子窗口,那五个窗口就是兄弟窗口。尽管GetWindow可用于枚举窗口,但倘若要在枚举过程中重新定位、创建和清除窗口,那么enumwindows喉EnumChildWindows更为可靠
来源:http://www.vbgood.com/api-getwindow.html
页:
[1]