遍历指定窗口的所有子窗口和孙窗口,并返回符合条件的窗口句柄和屏幕位置 并点击
时间: 2023-07-19 08:34:46 浏览: 86
遍历符合条件的窗口句柄
好的,这个问题需要使用 Windows API 来实现。以下是实现该功能的示例代码:
```c++
#include <Windows.h>
#include <vector>
// 遍历窗口的回调函数
BOOL CALLBACK EnumChildWindowsProc(HWND hwnd, LPARAM lParam) {
std::vector<HWND>* pHandles = reinterpret_cast<std::vector<HWND>*>(lParam);
if (pHandles != nullptr) {
// 将符合条件的窗口句柄保存到容器中
TCHAR className[MAX_PATH] = { 0 };
GetClassName(hwnd, className, MAX_PATH);
if (_tcscmp(className, _T("Notepad")) == 0) {
pHandles->push_back(hwnd);
}
}
return TRUE;
}
int main() {
HWND hWndParent = FindWindow(nullptr, _T("Untitled - Notepad")); // 父窗口句柄
if (hWndParent == nullptr) {
return 1;
}
// 遍历所有子窗口和孙窗口
std::vector<HWND> handles;
EnumChildWindows(hWndParent, EnumChildWindowsProc, reinterpret_cast<LPARAM>(&handles));
// 点击符合条件的窗口
for (HWND hwnd : handles) {
RECT rect = { 0 };
GetWindowRect(hwnd, &rect);
// 假设符合条件的窗口是 Notepad 的子窗口,我们可以点击窗口的左上角来模拟点击“文件”菜单
SendMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(5, 5));
SendMessage(hwnd, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(5, 5));
}
return 0;
}
```
这个示例程序会遍历指定父窗口的所有子窗口和孙窗口,找到符合条件的窗口句柄后,模拟点击该窗口的左上角。你可以根据自己的需求修改回调函数 `EnumChildWindowsProc` 中的条件判断,以及点击窗口的位置和方式。
阅读全文