gpt4 book ai didi

c++ - 进程 ID 函数出现错误 "ERROR_NO_MORE_FILES"

转载 作者:行者123 更新时间:2023-11-30 04:18:57 26 4
gpt4 key购买 nike

我试图使用下面的函数从进程中获取 ID,但是 GetLastError 一直返回 ERROR_NO_MORE_FILES,因此它永远没有机会遍历所有进程。我不确定是什么原因造成的。有任何想法吗?同样作为测试,我将参数作为“notepad.exe”传递

int GetProcID(string ProcName){
PROCESSENTRY32 PE32;
HANDLE ProcSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

PE32.dwSize = sizeof(PROCESSENTRY32);

if(!Process32First(ProcSnapshot,&PE32))
return 0;
else
if(PE32.szExeFile == ProcName)
return PE32.th32ProcessID;
else
{
while(GetLastError() != ERROR_NO_MORE_FILES){
Process32Next(ProcSnapshot,&PE32);
if(PE32.szExeFile == ProcName)
return PE32.th32ProcessID;
}
return 0;
}
}

最佳答案

您的 while 循环是错误的。即使在调用 Process32Next 函数之前,您也不应该检查错误值。如果先前对 Windows API 函数(可能是另一个 Process32Next 函数)的调用返回 ERROR_NO_MORE_FILES,并且快照中的第一个进程的名称恰好发生,您的函数将返回而不做任何事情不是您要搜索的名称。

请记住,并非所有 API 函数都会将错误代码设置为 ERROR_SUCCESS,即使它们已经成功(并且不要忘记在完成后关闭快照句柄)。

关于c++ - 进程 ID 函数出现错误 "ERROR_NO_MORE_FILES",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16087459/

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