检查给定进程是否为 运行
Checking if given process is running
当我使用以下函数作为 isRunning("example.exe");无论进程是否为 运行,它总是 returns 0。
我试着做了 std::cout << pe.szExeFile;在 do-while 循环中,它以与我尝试传递函数相同的格式输出所有进程。
该项目是多字节字符集,以防万一。
bool isRunning(CHAR process_[])
{
HANDLE pss = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
PROCESSENTRY32 pe = { 0 };
pe.dwSize = sizeof(pe);
if (Process32First(pss, &pe))
{
do
{
if (pe.szExeFile == process_) // if(!strcmp(pe.szExeFile, process_)) is the correct line here
return true; // If you use this remember to close the handle here too with CloseHandle(pss);
} while (Process32Next(pss, &pe));
}
CloseHandle(pss);
return false;
}
似乎找不到我的错误。
谢谢你的时间。
您正在使用比较指针值的 if (pe.szExeFile == process_)
。您应该使用 strcmp
或 _stricmp
之类的东西来比较实际的字符串值。
例如
if(strcmp (pe.szExeFile, process_) == 0)
return true;
当我使用以下函数作为 isRunning("example.exe");无论进程是否为 运行,它总是 returns 0。
我试着做了 std::cout << pe.szExeFile;在 do-while 循环中,它以与我尝试传递函数相同的格式输出所有进程。
该项目是多字节字符集,以防万一。
bool isRunning(CHAR process_[])
{
HANDLE pss = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
PROCESSENTRY32 pe = { 0 };
pe.dwSize = sizeof(pe);
if (Process32First(pss, &pe))
{
do
{
if (pe.szExeFile == process_) // if(!strcmp(pe.szExeFile, process_)) is the correct line here
return true; // If you use this remember to close the handle here too with CloseHandle(pss);
} while (Process32Next(pss, &pe));
}
CloseHandle(pss);
return false;
}
似乎找不到我的错误。 谢谢你的时间。
您正在使用比较指针值的 if (pe.szExeFile == process_)
。您应该使用 strcmp
或 _stricmp
之类的东西来比较实际的字符串值。
例如
if(strcmp (pe.szExeFile, process_) == 0)
return true;