Как получить целочисленный PID процесса? - PullRequest
0 голосов
/ 07 января 2020

Мне любопытно - как я могу получить PID исполняемого файла по имени или список PID в C ++ на Windows? Я сослался на эту документацию:

Снимок и просмотр процессов

При компиляции и запуске этого кода все идентификаторы процессов имеют шестнадцатеричный формат. Есть ли способ получить целочисленное значение PID вместо этого?

Например, есть ли способ получить значение:

10200

Вместо

0x000027D8

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

Ответы [ 2 ]

1 голос
/ 07 января 2020

Функция GetProcessId

Извлекает идентификатор процесса указанного процесса.

Подробнее Здесь

Пример кода ( примечание определение DWORD DWORD - это 32-разрядное без знака целое число ):

DWORD MyGetProcessId(LPCTSTR ProcessName) // non-conflicting function name
{
    PROCESSENTRY32 pt;
    HANDLE hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    pt.dwSize = sizeof(PROCESSENTRY32);
    if (Process32First(hsnap, &pt)) { // must call this first
        do {
            if (!lstrcmpi(pt.szExeFile, ProcessName)) {
                CloseHandle(hsnap);
                return pt.th32ProcessID;
            }
        } while (Process32Next(hsnap, &pt));
    }
    CloseHandle(hsnap); // close handle on failure
    return 0;
}

int main()
{
    DWORD pid = MyGetProcessId(TEXT("calc.exe"));
    std::cout << pid;
    if (pid == 0) { printf("error 1"); getchar(); }//error
    return 0;
}
0 голосов
/ 07 января 2020

Сами PID уже являются целыми числами. Код MSDN выводит PID в шестнадцатеричном формате. Просто измените 0x%08X на %u в следующих 2 строках, чтобы вместо этого выводить PID в десятичном формате:

_tprintf( TEXT("\n Process ID = %u"), pe32.th32ProcessID );
...
_tprintf( TEXT("\n Parent process ID = %u"), pe32.th32ParentProcessID );
...