gpt4 book ai didi

C++ 进程监控 (GetExitCodeProcess)

转载 作者:行者123 更新时间:2023-11-28 02:02:31 28 4
gpt4 key购买 nike

我想用 C++ 监控一个进程,所以我使用:

std::wstring windowName = TEXT("needle");
HWND windowHandle = FindWindowW(NULL, windowName.c_str());

FindWindow 函数,据我所知,检查所有窗口的标题(为什么微软要用它的核心部分命名他们的操作系统,在 Windows 中检查窗口,疯狂)。如果标题与“针”匹配,那么它会给我...

HWND windowHandle

接下来我使用:

DWORD* PID;
GetWindowThreadProcessId(windowHandle, PID);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, *PID);

这为我提供了我命名的进程 ID 或 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”(新动词)state 的值给了我某种十六进制代码。尽管有多个窗口以“针”为标题,但它永远不会是“STILL_ACTIVE”。代码编译得很好,它只是与转换、指针、LPCWSTR 或我从未遇到过的东西有关。帮助将不胜感激。谢谢

最佳答案

你有两个问题:

1) 正如 PaulMcKenzie 在他的回答中指出的那样,PID 没有指向任何内容,并且会导致问题。相反,您应该声明一个 DWORD 并将指向它的指针传递给 GetWindowThreadProcessId:

DWORD PID;
// note: &PID instead of just PID
GetWindowThreadProcessId(windowHandle, &PID);
// note: Just PID instead of *PID
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);

2) GetExitCodeProcess 需要进程句柄,而不是未初始化的 HWND。相反,您应该为它提供从 OpenProcess 返回的句柄:

DWORD state;
// note: this is the hProcess returned from OpenProcess
GetExitCodeProcess(hProcess, &state);

请注意,这仍然只适用于一个进程。如果多个进程都有标题为“needle”的窗口,那么 FindWindow 调用的结果将不可预测。

关于C++ 进程监控 (GetExitCodeProcess),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38861333/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com