Ручка к ручке окна - PullRequest
       23

Ручка к ручке окна

5 голосов
/ 20 ноября 2010

Я пытался использовать метод "захватить все идентификаторы процессов, перечисленные на рабочем столе", однако это не работает.

  • Есть ли способ преобразовать дескриптор в окносправиться?-или-
  • Есть ли способ взять идентификатор процесса и найти все дочерние окна, порожденные этим процессом?

Я не хочу использовать FindWindowиз-за нескольких проблем процесса.

1 Ответ

6 голосов
/ 20 ноября 2010

Вы можете вызвать EnumWindows () , чтобы перебрать все окна верхнего уровня на экране, а затем использовать GetWindowThreadProcessId () , чтобы выяснить, какие из них принадлежат вашему процессу.

Например, что-то вроде:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...