跳到主要内容

EnumWindowT 获得符合条件的所有顶层窗口句柄

🎯功能

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

📜语法

HwndArray = Plugin.WndEx7_71.EnumWindowT(窗口标题, 窗口类名, 进程名或ID, 窗口图标数据, 过滤条件)

📥参数

参数数据类型解释
窗口标题整型数字符串为搜索条件,取整型数0时不过滤窗口标题。
窗口类名整型数字符串为搜索条件,取整型数0时不过滤窗口类名。
进程名或ID整型数字符串为搜索条件,进程名用字符串,进程ID用整数,不过滤进程名和进程ID时用整数0
窗口图标数据整型数字符串为搜索条件,取整型数0时不过滤窗口图标数据。此数据可用本插件中的 GetWindowIconData 函数获得。有的程序在屏幕颜色分别为32位时和16位时启动程序获得的程序窗口图标数据不相同,这时候可以在屏幕颜色为32位时和16位时分别启动窗口程序,获得它们的窗口图标数据,这时可以将它们连接起来,用"|"号将它们分隔,这时符合任意一种情况均认为符合条件。
过滤条件长整型数取值可以是下面的一个或多个,不用时可取0。如果要同时使用多个值,可将多个值做或运算或者加法运算。
参数5(过滤条件)可取以下值
过滤条件说明
1标题通配符匹配,使用此值时,可以使用"?""*"进行模糊搜索窗口标题,"?"代表一个任意字符,"*"代表0个或者多个任意字符。
2类名通配符匹配,和标题匹配类似。
8排除所有者窗口,如果使用此值,获得的窗口都无所有者窗口。
16窗口必须可见,如果使用此值,获得的窗口都是可见窗口。
64和取值8时相反,不可与值8同时使用。
128和取值16时相反,不可与值16同时使用。
256只取主窗口的窗口句柄,过滤条件模仿Windows任务管理器的应用程序列表。使用此值时,值81664128无效。部分程序的窗口常常有些非主窗口用前面的方法很难过滤掉,这时可以试下这个值。此方法有可能过滤过度导致找不到窗口。
65536使用另一种历遍方法,因为曾经遇到几个游戏用常用的历遍方法取不到它们的窗口句柄,用这个方法就没问题,但平常不推荐使用此历遍方法,它可能导致程序进入死循环。

📤返回

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

💡示例

RunApp "notepad.exe"
RunApp "notepad.exe"
RunApp "notepad.exe"
Delay 1000
HwndArray = Plugin.WndEx7_71.EnumWindowT(0,0,"notepad.exe",0,16)
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

📘备注