c – 是否可以创建枚举无法找到的win32消息传递窗口?

我正在尝试使用以下代码枚举所有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?.

点赞