我想检测所有顶级窗口,以便向其后代发送消息。 我怎样才能做到这一点? 以下代码似乎没有检测到Qt顶级窗口,我不知道为什么。
static BOOL CALLBACK EnumWindowsProc(_In_ HWND hwnd, _In_ LPARAM lParam) {
WORD far wndProcessID;
WORD currentProcessID = GetCurrentProcessId();
std::vector<HWND> *topWindowList = (std::vector<HWND> *)lParam;
if (topWindowList != NULL &&
GetWindowThreadProcessId(hwnd, NULL) == currentProcessID) {
printf("Found a top level window");
fflush(stdout);
topWindowList->push_back(hwnd);
}
return TRUE;
}
void enumAllDesktopChildWindow() {
std::vector<HWND> topWindowList;
EnumChildWindows(GetDesktopWindow(), EnumWindowsProc, LPARAM(&topWindowList));
}
答案 0 :(得分:3)
首先,GetWindowThreadProcessId API返回一个线程ID(TID)而不是一个进程ID(PID)
其次,如果要枚举所有顶级Windows,则应使用EnumWindows,而不是EnumChildWindows。如果希望使用EnumChildWindows,请将NULL作为第一个参数传递。