#include <windows.h>
#include <tlhelp32.h>
#include <iostream>
using namespace std;
void GetProcId();
DWORD ProcId = 0;
int main()
{
GetProcId();
printf("%d", ProcId);
cin.get();
return 0;
}
void GetProcId()
{
PROCESSENTRY32 pe32;
HANDLE hSnapshot = NULL;
pe32.dwSize = sizeof(PROCESSENTRY32);
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(Process32First(hSnapshot, &pe32))
{
do{
if(strcmp(pe32.szExeFile, "s.exe") == 0)
break;
}while(Process32Next(hSnapshot, &pe32));
}
if(hSnapshot != INVALID_HANDLE_VALUE)
CloseHandle(hSnapshot);
ProcId = pe32.th32ProcessID;
}
Работает, но когда процесс «s.exe» не открыт, он захватывает свой собственный идентификатор процесса, я действительно не слишком уверен, как я может это исправить. помощь была бы очень признательна, спасибо!C++ Получить идентификатор процесса, получающий локальный идентификатор, если целевой процесс не открыт
Пожалуйста, обратите внимание на ваш вопрос о том, четко. Также отредактируйте свой заголовок, чтобы отразить ваш вопрос. –
Фактически он вытягивает идентификатор процесса последней информации процесса, полученной во время перечисления. Вы должны добавить чек, чтобы узнать, не найден ли процесс, который вы ищете. –
Выглядит так, как будто вы всегда будете проверять последний pe32 и это может быть или не быть вызывающим процессом и может быть недействительным. Я ничего не вижу в документации, которая говорит, что вы получаете, когда 'Process32Next' возвращает false. – user4581301