Чтобы получить идентификатор процесса с произвольным именем, вы можете сделать:
#include <Windows.h>
#include <string>
#include <tlhelp32.h>
int getPID(const std::string& process_name)
{
PROCESSENTRY32 entry;
entry.dwSize = sizeof(PROCESSENTRY32);
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (!Process32First(snapshot, &entry)) return 0;
do
{
if (strcmp(entry.szExeFile, process_name.c_str()) == 0)
{
CloseHandle(snapshot);
return entry.th32ProcessID;
}
} while (Process32Next(snapshot, &entry));
CloseHandle(snapshot);
return 0;
}
Затем вы можете получить дескриптор этого процесса следующим образом:
HANDLE hProcess = OpenProcess (PROCESS_SET_INFORMATION, FALSE, pid);
И, наконец,вы можете передать hProcess
на SetProcessAffinityMask
и SetPriorityClass
обычным способом.
Я считаю, что вам нужно работать с повышенными правами (т.е. с правами администратора), чтобы это работало, - и протестируйте OpenProcess
успешно и сообщить результат вызова GetLastError
, если нет.