5

I've tried using the "grab all of the process IDs enumerated by the desktop" method, however that doesn't work.

  • Is there a way to convert a handle to a window handle? -or-
  • Is there a way to take a process ID and find out all of the child windows spawned by the process?

I don't want to use FindWindow due to multiple process issues.

Uwe Keim
  • 39,551
  • 56
  • 175
  • 291
Saustin
  • 1,117
  • 6
  • 15
  • 27

1 Answers1

6

You could call EnumWindows() to iterate over all the top-level windows on the screen, then use GetWindowThreadProcessId() to find out which ones belong to your process.

For example, something like:

BOOL CALLBACK ForEachTopLevelWindow(HWND hwnd, LPARAM lp)
{
    DWORD processId;
    GetWindowThreadProcessId(hwnd, &processId);
    if (processId == (DWORD) lp) {
        // `hwnd` belongs to the target process.
    }
    return TRUE;
}

VOID LookupProcessWindows(DWORD processId)
{
    EnumWindows(ForEachTopLevelWindow, (LPARAM) processId);
}
Frédéric Hamidi
  • 258,201
  • 41
  • 486
  • 479