拓展找窗口 - FindWindowEx
函数简介
查找符合类名或者标题名的窗口。如果指定了父窗口句柄,则在父窗口的第一层子窗口中查找;否则在顶层窗口中查找。该函数支持模糊匹配,可以更灵活地查找目标窗口。
接口名称
FindWindowEx
DLL调用
long FindWindowEx(long ola, long parent, string class, string title)
参数定义:
ola
(长整型数): OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。parent
(长整型数): 父窗口句柄。如果为0,则在顶层窗口中查找。class
(字符串): 窗口类名,支持模糊匹配。如果为空字符串,则匹配所有类名。title
(字符串): 窗口标题,支持模糊匹配。如果为空字符串,则匹配所有标题。
示例:
// 在顶层窗口中查找标题包含"记事本"的窗口
long hwnd = FindWindowEx(ola, 0, "", "记事本");
if (hwnd != 0) {
printf("找到记事本窗口,句柄为:%ld\n", hwnd);
} else {
printf("未找到记事本窗口\n");
}
// 在指定父窗口下查找类名包含"Button"的子窗口
hwnd = FindWindowEx(ola, parent_hwnd, "Button", "");
if (hwnd != 0) {
printf("找到按钮窗口,句柄为:%ld\n", hwnd);
} else {
printf("未找到按钮窗口\n");
}
// 同时指定类名和标题进行精确查找
hwnd = FindWindowEx(ola, 0, "Notepad", "无标题 - 记事本");
if (hwnd != 0) {
printf("找到指定窗口,句柄为:%ld\n", hwnd);
}
COM调用
long FindWindowEx(long parent, string class, string title)
参数定义:
parent
(长整型数): 父窗口句柄。如果为0,则在顶层窗口中查找。class
(字符串): 窗口类名,支持模糊匹配。如果为空字符串,则匹配所有类名。title
(字符串): 窗口标题,支持模糊匹配。如果为空字符串,则匹配所有标题。
示例:
# 在顶层窗口中查找标题包含"记事本"的窗口
hwnd = ola.FindWindowEx(0, "", "记事本")
if hwnd != 0:
messagebox("找到记事本窗口,句柄为:" + str(hwnd))
else:
messagebox("未找到记事本窗口")
# 在指定父窗口下查找类名包含"Button"的子窗口
hwnd = ola.FindWindowEx(parent_hwnd, "Button", "")
if hwnd != 0:
messagebox("找到按钮窗口,句柄为:" + str(hwnd))
else:
messagebox("未找到按钮窗口")
# 同时指定类名和标题进行精确查找
hwnd = ola.FindWindowEx(0, "Notepad", "无标题 - 记事本")
if hwnd != 0:
messagebox("找到指定窗口,句柄为:" + str(hwnd))
返回值
长整型数:
- 返回找到的窗口句柄
- 如果未找到匹配的窗口,返回0
注意事项
- 该函数只查找第一层子窗口,不会递归查找子窗口的子窗口
- 如果同时指定了类名和标题,则两个条件都必须满足才会返回窗口句柄
- 模糊匹配时,只要窗口类名或标题包含指定的字符串即可匹配成功
- 建议在使用此函数前,先使用 FindWindow 函数获取父窗口句柄
- 对于某些特殊窗口,可能需要使用 FindWindowSuper 函数进行查找