как использовать заголовок окна, чтобы получить идентификатор процесса и имя процесса - PullRequest
0 голосов
/ 02 декабря 2010

Я хотел бы получить идентификатор процесса и имя процесса с помощью заголовка окна. Моя среда разработки Visual C ++ 2008

, как это сделать.

спасибо

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Поиск по окну по названию ненадежен. Но если вы хотите сделать это, сначала вам нужно найти дескриптор окна для указанного заголовка. Вы можете легко сделать это с помощью функции EnumWindows . Когда вы найдете HWND, вы можете использовать функцию GetWindowThreadProcessId , чтобы получить идентификатор процесса.

UPD: чтобы получить имя процесса, вам нужно получить дескриптор процесса с помощью OpenProcess и использовать GetProcessImageFileName .

0 голосов
/ 02 декабря 2010
HWND hw = FindWindow(NULL, L"Window Title");

if (hw)
{
    DWORD dwProcessId = 0;
    DWORD dwThreadId = GetWindowThreadProcessId(hw, &dwProcessId);

    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwProcessId);

    if (hProcess)
    {
         wchar_t *szExeName[1024] = {0};
         if (QueryFullProcessImageName(hProcess, 0, szExeName, _countof(szExeName))
         {
            // ...
         }
         CloseHandle(hProcess);
    }
}

Вы, вероятно, должны также использовать аргумент класса (тот, который равен NULL в моей первой строке), если вы знаете его, так что с меньшей вероятностью вы случайно найдете окно какой-то другой программы, которое, как оказалось, имееттот же заголовок.

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

Вы можете получить окнокласс легко с помощью Spy ++.

Редактировать: QueryFullProcessImageName требует Vista, но вы можете поменять эту строку на ту, которая использует GetProcessImageFileName согласно ответу DReJ.

Edit2: если вы не компилируете для Unicode,удалите «L» перед «Заголовком окна» и используйте буфер символов вместо wchar_t.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...