我正在尝试使用以下代码枚举所有win32窗口:
EnumChildWindows(GetDesktopWindow(),
WindowManager::enumChildWindows,
reinterpret_cast<LPARAM>(this));
BOOL CALLBACK WindowManager::enumChildWindows(HWND hwnd, LPARAM lParam) {
WindowManager* manager = reinterpret_cast<WindowManager*>(lParam);
//
// Do stuff with child window handle (hwnd)
//
// Return TRUE to continue enumeration, FALSE to stop.
return TRUE;
}
基本上,我通过从WinAPI调用GetDesktopWindow(VOID)函数获得最顶层的窗口,并通过从WinAPI再次调用EnumChildWindows(__in_opt HWND hWndParent,__ in WNDENUMPROC lpEnumFunc,__ in LPARAM lParam)函数来枚举子窗口.
简单来说,我的问题是,我可以通过这种方法错过任何win32窗口吗?任何人都可以隐藏win32窗口,这样这种方法无法枚举它吗?
提前致谢.
最佳答案 按照您的方式(通过EnumChildWindows(GetDesktopWindow)) – 可以:只创建仅消息窗口.
附:但是您可以通过EnumChildWindows枚举仅消息窗口(GetAindstor(FindWindowEx(HWND_MESSAGE,0,0,0),GA_PARENT)):请参阅
How come FindWindow finds a window that EnumChildWindows doesn’t?.