枚举进程窗口 - EnumWindowByProcess
函数简介
根据指定进程以及其它条件,枚举系统中符合条件的窗口
接口名称
EnumWindowByProcess
DLL调用
long EnumWindowByProcess(long ola, string process_name, string title, string class_name, int filter)
参数定义:
ola
(长整型数): OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。process_name
(字符串): 进程映像名,如"svchost.exe"。此参数精确匹配但不区分大小写。title
(字符串): 窗口标题,支持模糊匹配。class_name
(字符串): 窗口类名,支持模糊匹配。filter
(整型数): 过滤条件,可以组合使用(值相加):- 1: 匹配窗口标题(参数title有效)
- 2: 匹配窗口类名(参数class_name有效)
- 4: 只匹配指定映像名的第一个进程
- 8: 匹配顶级窗口(所有者窗口为0)
- 16: 匹配可见窗口
示例:
// 查找进程"notepad.exe"的所有可见顶级窗口,标题包含"记事本"
long strPtr = EnumWindowByProcess(ola, "notepad.exe", "记事本", "", 1 + 8 + 16);
if (strPtr != 0) {
// 使用窗口句柄列表
// 返回格式: "hwnd1,hwnd2,hwnd3"
// ...
// 释放内存
FreeStringPtr(strPtr);
}
// 查找进程"chrome.exe"的所有可见窗口,类名包含"Chrome"
strPtr = EnumWindowByProcess(ola, "chrome.exe", "", "Chrome", 2 + 16);
if (strPtr != 0) {
// 使用窗口句柄列表
// ...
FreeStringPtr(strPtr);
}
COM调用
string EnumWindowByProcess(string process_name, string title, string class_name, int filter)
参数定义:
process_name
(字符串): 进程映像名,如"svchost.exe"。此参数精确匹配但不区分大小写。title
(字符串): 窗口标题,支持模糊匹配。class_name
(字符串): 窗口类名,支持模糊匹配。filter
(整型数): 过滤条件,可以组合使用(值相加):- 1: 匹配窗口标题(参数title有效)
- 2: 匹配窗口类名(参数class_name有效)
- 4: 只匹配指定映像名的第一个进程
- 8: 匹配顶级窗口(所有者窗口为0)
- 16: 匹配可见窗口
示例:
# 查找进程"notepad.exe"的所有可见顶级窗口,标题包含"记事本"
hwnd_list = ola.EnumWindowByProcess("notepad.exe", "记事本", "", 1 + 8 + 16)
hwnd_array = hwnd_list.split(",")
for hwnd in hwnd_array:
messagebox("Found window handle: " + hwnd)
# 查找进程"chrome.exe"的所有可见窗口,类名包含"Chrome"
hwnd_list = ola.EnumWindowByProcess("chrome.exe", "", "Chrome", 2 + 16)
hwnd_array = hwnd_list.split(",")
for hwnd in hwnd_array:
messagebox("Found Chrome window: " + hwnd)
返回值
字符串:
- 返回所有匹配的窗口句柄字符串,格式为"hwnd1,hwnd2,hwnd3"
注意:
- DLL调用返回字符串指针地址,需要调用 FreeStringPtr 接口释放内存