我正在尝试使用以下代码枚举所有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窗口,这样这种方法无法枚举它吗?
提前致谢。
答案 0 :(得分:2)
按照您的方式(通过EnumChildWindows(GetDesktopWindow)) - 可以:只创建仅消息窗口。 附:但您可以通过EnumChildWindows枚举仅限消息的窗口(GetAindstor(FindWindowEx(HWND_MESSAGE,0,0,0),GA_PARENT)):请参阅How come FindWindow finds a window that EnumChildWindows doesn't?。