Я хочу, чтобы контролировать процесс в C++, поэтому я использую:C++ Мониторинг процессов (GetExitCodeProcess)
std::wstring windowName = TEXT("needle");
HWND windowHandle = FindWindowW(NULL, windowName.c_str());
Функция FindWindow, как я понимаю, проверяет заголовок для всех окон (Почему Microsoft назовите их ОС после основной части, проверяя окна в Windows, безумие). Если название соответствует «игле», то это дает мне ...
HWND windowHandle
Далее я использую:
DWORD* PID;
GetWindowThreadProcessId(windowHandle, PID);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, *PID);
Это дает мне ProcessId или PID, как я назвал его. Затем я могу использовать, чтобы ...
HWND p;
DWORD state;
GetExitCodeProcess(p, &state);
... получить состояние процесса, я собираюсь проверить это быть «STILL_ACTIVE», например, так:
if (state != STILL_ACTIVE) {
std::cout << "excessive profanity\n";
}
else {
std::cout << "sigh of relief\n";
}
За исключением это не работает, «cout-ing» (новый глагол) значение состояния дает мне какой-то шестнадцатеричный код. Это никогда не «STILL_ACTIVE», несмотря на наличие нескольких окон с «иглой» в качестве названия. Код компилируется отлично, это просто связано с конверсией, указателями, LPCWSTR или чем-то, с чем я никогда не сталкивался. Помощь была бы оценена. Благодаря
Вызов 'GetExitCodeProcess' с' HWND' неправильный, особенно неинициализированный. Вы должны проходить 'hProcess'. И похоже, что вы неправильно проверяете ошибки. Вы также должны заметить, что 'GetExitCodeProcess' не является правильным способом проверить, прошел ли процесс, вы должны использовать' WaitForSingleObject' с нулевым таймаутом. –