如果一个进程没有运行,我不应该显示某些上下文菜单选项? 我正在使用进程名称检查进程是否正在运行。
但问题是,进程名称在不同的Windows平台上显示不同的方式。
即,Windows任务栏上的Windows 64位进程名称为“ applicationname.exe ”
某些windows xp机器显示与“ applica~2.exe ”相同的进程名称
请让我知道检查流程是否正在运行的一致方法?
我的开发环境是C ++和Visual Studio 2010
DWORD getProcessID(const std::wstring& processName)
{
PROCESSENTRY32 info;
info.dwSize = sizeof(info);
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if ( snapshot == INVALID_HANDLE_VALUE )
return 0;
Process32First(snapshot, &info);
if ( !processName.compare(info.szExeFile) )
{
CloseHandle(snapshot);
return info.th32ProcessID;
}
while ( Process32Next(snapshot, &info) )
{
if ( !processName.compare(info.szExeFile) )
{
CloseHandle(snapshot);
return info.th32ProcessID;
}
}
CloseHandle(snapshot);
return 0;
}
答案 0 :(得分:1)
EnumProcesses
是枚举活动进程的另一种方法。
不同之处在于您需要为PID分配空间,调用EnumProcesses
,使用PROCESS_QUERY_INFORMATION
访问标志打开每个进程,然后在其句柄上调用GetProcessImageFileName
并进行比较。
答案 1 :(得分:0)
您是相关流程的作者吗?如果是这样,更稳健的设计将是使用IPC直接询问过程。这样,您不一定要进行民意调查,也不会遇到令人恼火的问题,例如,如果您检测到流程,创建上下文菜单然后流程会中断,会发生什么?
答案 2 :(得分:0)
使用WMI查询Win32_Process的实例,可以检查正在运行的进程的完整路径,以查找您需要查看的进程的匹配。