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 (PID) ではなくスレッド ID (TID) を返します。

第 2 に、最上位の Windows をすべて列挙する場合は、EnumChildWindows ではなく EnumWindows を使用する必要があります。EnumChildWindowsを使用する場合は、最初のパラメーターとして NULL を渡します。

于 2013-11-03T16:22:57.587 に答える