2

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

1 回答 1

3

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

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

于 2013-11-03T16:22:57.587 回答