查找特殊窗口 - FindWindowSuper
函数简介
根据多种条件组合查找特定窗口。该函数提供了更灵活的窗口查找方式,支持两个条件的组合查询,可以基于窗口标题、类名、程序名、路径等多种属性进行精确或模糊匹配。
接口名称
FindWindowSuper
DLL调用
long FindWindowSuper(long ola, string spec1, int flag1, int type1, string spec2, int flag2, int type2)
参数定义:
ola
(长整型数): OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。spec1
(字符串): 第一个查找条件的内容,具体含义由flag1决定。flag1
(整型数): 指定spec1的内容类型:- 0: 窗口标题
- 1: 程序名(如"notepad")
- 2: 窗口类名
- 3: 程序路径(不含盘符,如"\windows\system32")
- 4: 父窗口句柄(十进制字符串)
- 5: 父窗口标题
- 6: 父窗口类名
- 7: 顶级窗口句柄(十进制字符串)
- 8: 顶级窗口标题
- 9: 顶级窗口类名
type1
(整型数): 第一个条件的匹配方式:- 0: 精确匹配
- 1: 模糊匹配
spec2
(字符串): 第二个查找条件的内容,具体含义由flag2决定。flag2
(整型数): 指定spec2的内容类型,取值同flag1。type2
(整型数): 第二个条件的匹配方式:- 0: 精确匹配
- 1: 模糊匹配
示例:
// 查找标题包含"记事本"且类名为"Notepad"的窗口
long hwnd = FindWindowSuper(ola, "记事本", 0, 1, "Notepad", 2, 0, 0);
if (hwnd != 0) {
printf("找到记事本窗口,句柄:%ld\n", hwnd);
} else {
printf("未找到记事本窗口\n");
}
// 查找父窗口标题包含"Chrome"且程序路径包含"Google"的窗口
hwnd = FindWindowSuper(ola, "Chrome", 5, 1, "\\Google\\", 3, 1, 0);
if (hwnd != 0) {
printf("找到Chrome窗口,句柄:%ld\n", hwnd);
} else {
printf("未找到Chrome窗口\n");
}
// 查找程序名为"notepad"且类名为"Notepad"的窗口
hwnd = FindWindowSuper(ola, "notepad", 1, 0, "Notepad", 2, 0, 0);
if (hwnd != 0) {
printf("找到记事本窗口,句柄:%ld\n", hwnd);
}
// 查找顶级窗口标题包含"Microsoft"且程序路径包含"Office"的窗口
hwnd = FindWindowSuper(ola, "Microsoft", 8, 1, "\\Office\\", 3, 1, 0);
if (hwnd != 0) {
printf("找到Office窗口,句柄:%ld\n", hwnd);
}
COM调用
long FindWindowSuper(string spec1, int flag1, int type1, string spec2, int flag2, int type2)
参数定义:
spec1
(字符串): 第一个查找条件的内容,具体含义由flag1决定。flag1
(整型数): 指定spec1的内容类型:- 0: 窗口标题
- 1: 程序名(如"notepad")
- 2: 窗口类名
- 3: 程序路径(不含盘符,如"\windows\system32")
- 4: 父窗口句柄(十进制字符串)
- 5: 父窗口标题
- 6: 父窗口类名
- 7: 顶级窗口句柄(十进制字符串)
- 8: 顶级窗口标题
- 9: 顶级窗口类名
type1
(整型数): 第一个条件的匹配方式:- 0: 精确匹配
- 1: 模糊匹配
spec2
(字符串): 第二个查找条件的内容,具体含义由flag2决定。flag2
(整型数): 指定spec2的内容类型,取值同flag1。type2
(整型数): 第二个条件的匹配方式:- 0: 精确匹配
- 1: 模糊匹配
示例:
# 查找标题包含"记事本"且类名为"Notepad"的窗口
hwnd = ola.FindWindowSuper("记事本", 0, 1, "Notepad", 2, 0, 0)
if hwnd != 0:
messagebox("找到记事本窗口,句柄:" + str(hwnd))
else:
messagebox("未找到记事本窗口")
# 查找父窗口标题包含"Chrome"且程序路径包含"Google"的窗口
hwnd = ola.FindWindowSuper("Chrome", 5, 1, "\\Google\\", 3, 1, 0)
if hwnd != 0:
messagebox("找到Chrome窗口,句柄:" + str(hwnd))
else:
messagebox("未找到Chrome窗口")
# 查找程序名为"notepad"且类名为"Notepad"的窗口
hwnd = ola.FindWindowSuper("notepad", 1, 0, "Notepad", 2, 0, 0)
if hwnd != 0:
messagebox("找到记事本窗口,句柄:" + str(hwnd))
# 查找顶级窗口标题包含"Microsoft"且程序路径包含"Office"的窗口
hwnd = ola.FindWindowSuper("Microsoft", 8, 1, "\\Office\\", 3, 1, 0)
if hwnd != 0:
messagebox("找到Office窗口,句柄:" + str(hwnd))
返回值
长整型数:
- 返回找到的窗口句柄
- 如果未找到匹配的窗口,返回0
注意事项
- 两个条件必须同时满足才会返回窗口句柄
- 模糊匹配时,只要窗口属性包含指定的字符串即可匹配成功
- 程序路径匹配时不区分大小写,且不需要包含盘符
- 建议在使用此函数前,先使用 GetWindowTitle、GetWindowClass 等函数获取窗口信息
- 如果需要查找多个符合条件的窗口,可以使用 EnumWindowSuper 函数