Michael Haephrati Ответов: 2

Как найти несколько дескрипторов окна из идентификатора процесса


Как можно найти и перечислить все дескрипторы окон, связанные с одним PID (идентификатором процесса), например, когда программа использует несколько окон из одного процесса?

Что я уже пробовал:

Я опубликовал то, что, по моему мнению, является ответом на этот вопрос (в интересах сообщества Code Project). Пожалуйста, не стесняйтесь публиковать лучшие ответы.

2 Ответов

Рейтинг:
1

lakshmanakumar_varada

Приведенный выше код имеет одинаковое имя для обоих параметров, передаваемых в функцию из основной и локальной переменной внутри функции.
т. е. DWORD dwProcessID = 0;

что приведет к тому, что он будет перечислять все окна из всех процессов.

измените имя локальной переменной на что-то другое и используйте его в функции GetWindowThreadProcessId (), а также в сравнении.


Рейтинг:
0

Michael Haephrati

Следующий код находит дескрипторы всех окон для данного PID.

void GetAllWindowsFromProcessID(DWORD dwProcessID, std::vector <HWND> &vhWnds)
{
    // find all hWnds (vhWnds) associated with a process id (dwProcessID)
    HWND hCurWnd = NULL;
    do
    {
        hCurWnd = FindWindowEx(NULL, hCurWnd, NULL, NULL);
        DWORD dwProcessID = 0;
        GetWindowThreadProcessId(hCurWnd, &dwProcessID);
        if (dwProcessID == dwProcessID)
        {
            vhWnds.push_back(hCurWnd);  // add the found hCurWnd to the vector
            wprintf(L"Found hWnd %d\n", hCurWnd);
        }
    }
    while (hCurWnd != NULL);
}


Richard Deeming

Почему вы задали этот вопрос, если уже знали ответ?

Michael Haephrati

В этом нет ничего плохого. Цель Q&A состоит в том, чтобы публиковать вопросы, пока они еще не опубликованы, на благо всего сообщества. В следующий раз, когда кто-то будет искать этот вопрос, он его найдет, и хотя я опубликовал свое собственное решение, я не отметил, что вопрос решен и ждет других решений (может быть, лучше, чем мое).

Richard Deeming

Нет. Цель QA-попросить помощи, чтобы ответить на вопрос, на который вы еще не знаете ответа.

Если вы придумали решение, которое, по вашему мнению, принесет пользу обществу, то опубликуйте его в качестве подсказки[^].