C ++ Получение имени процесса через ProcessID - PullRequest
0 голосов
/ 24 июня 2018

Например, из PID 10948 я хотел бы получить имя процесса firefox.exe

Я пытался использовать GetModuleFileNameEx, GetModuleFileName, GetProcessImageFileName и GetModuleBaseName, и все они приводят к строке мусора символов, таких как: ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ 7Σ

Мой код:

DWORD* thread = new DWORD;
TCHAR szName[_MAX_FNAME];
HANDLE processhandle = OpenProcess(PROCESS_QUERY_INFORMATION, false, GetWindowThreadProcessId(GetForegroundWindow(), thread));
GetProcessImageFileName(processhandle, szName, _MAX_FNAME);
strrchr(szName, '\\');

Первоначально я пытался сделать это, используя python, используя библиотеку win32gui, используя дескриптор процесса, который работал, но он не смог найти дескрипторы командной строки. Мне все равно, какой язык я использую для решения этой проблемы определения текущей используемой программы, пока я могу найти название всех программ, которые я могу использовать.

1 Ответ

0 голосов
/ 24 июня 2018

OpenProcess() возвращает NULL в случае сбоя. Позвоните GetLastError(), чтобы узнать почему. То же самое с GetProcessImageFileName().

Кроме того, вместо этого попробуйте использовать PROCESS_QUERY_LIMITED_INFORMATION, так как для этого требуется меньше прав.

Кроме того, вы должны обнулить свой буфер szName перед его заполнением.

Кроме того, вам не нужно использовать new для выделения DWORD для GetWindowThreadProcessId().

Попробуйте это:

DWORD threadid;
DWORD processid = GetWindowThreadProcessId(GetForegroundWindow(), &threadid);
HANDLE processhandle = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, processid);
if (!processhandle) {
    // handle error as needed...
}
else {
    TCHAR szName[_MAX_FNAME] = {};
    if (!GetProcessImageFileName(processhandle, szName, _MAX_FNAME)) {
        // handle error as needed...
    }
    // ...
    CloseHandle(processhandle);
}
...