跳到主要内容

EnumWindowA 获得符合条件的所有窗口句柄

🎯功能

获得符合条件的所有窗口的窗口句柄。

📜语法

HwndArray = Plugin.WndEx7_71.EnumWindowA(父窗口句柄, 窗口标题, 窗口类名, 过滤条件)

📥参数

参数数据类型解释
父窗口句柄长整型数该参数不为0时,获得该窗口的子窗口的窗口句柄。取0时为获得顶层窗口的窗口句柄。参数4(过滤条件)使用16384时,该窗口句柄为所有者窗口句柄。
窗口标题整数型字符串为搜索条件,取整型数0时不过滤窗口标题。
窗口类名整数型字符串为搜索条件,取整型数0时不过滤窗口类名。
过滤条件长整型数取值可以是下面的一个或多个,不用时可取0。如果要同时使用多个值,可将多个值做或运算或者加法运算。
参数4(过滤条件)可取以下值
过滤条件说明
1标题通配符匹配,使用此值时,可以使用"?""*"进行模糊搜索窗口标题,"?"代表一个任意字符,"*"代表0个或者多个任意字符。
2类名通配符匹配,和标题匹配类似。
4仅下一级子窗口。父窗口句柄不为0时,如果使用此值,获得的是父窗口的所有下级子窗口;如果不使用此值,获得的是父窗口句柄的所有子窗口,包括子窗口的子窗口。
8排除所有者窗口,如果使用此值,获得的窗口都无所有者窗口。
16窗口必须可见,如果使用此值,获得的窗口都是可见窗口。
64和取值8时相反,不可与值8同时使用。
128和取值16时相反,不可与值16同时使用。
16384获得的窗口的所有者窗口是参数1(父窗口句柄)。
65536使用另一种历遍方法,因为曾经遇到几个游戏用常用的历遍方法取不到它们的窗口句柄,用这个方法就没问题,但平常不推荐使用此历遍方法,它可能导致程序进入死循环。

📤返回

一维长整型数数组,找到窗口时返回窗口句柄数组,未找到和失败时返回的是元素数量为0的一维数组。实际返回值的类型由本插件中的 SetArrayResultType 函数的设置决定。

💡示例

RunApp "notepad.exe"
RunApp "notepad.exe"
RunApp "notepad.exe"
Delay 1000
HwndArray = Plugin.WndEx7_71.EnumWindowA(0,0,"Notepad",0)
n = UBound(HwndArray)
If n=-1 Then
MsgBox "记事本窗口未找到", 4096
Else
str = CStr(HwndArray(0))
i = 1
For n
str = str & "," & CStr(HwndArray(i))
i = i + 1
Next
MsgBox "找到记事本窗口" & CStr(n+1) & "个,窗口句柄如下:" & vbCrLf & str, 4096
End If

📘备注