Win32 / Qt - 可以枚举属于调用进程的所有顶级窗口吗?

时间:2013-11-03 05:02:19

标签: c++ qt winapi

我想检测所有顶级窗口,以便向其后代发送消息。 我怎样才能做到这一点? 以下代码似乎没有检测到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));
}

1 个答案:

答案 0 :(得分:3)

首先,GetWindowThreadProcessId API返回一个线程ID(TID)而不是一个进程ID(PID)

其次,如果要枚举所有顶级Windows,则应使用EnumWindows,而不是EnumChildWindows。如果希望使用EnumChildWindows,请将NULL作为第一个参数传递。