【发布时间】:2012-05-17 14:49:47
【问题描述】:
如果一个进程没有运行,我不应该显示某些上下文菜单选项?。 我正在使用进程名称检查进程是否正在运行。
但问题是,进程名称在不同的 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;
}
【问题讨论】:
-
这是特定于 Windows 的,是吗?你应该添加一个标签。
-
谢谢 BobTFish,下次我会记住的。
-
您是否尝试过使用
Module32First?请参阅szExeFilehere 下方的说明。 -
全局,还是仅在当前用户上下文中?
标签: c++ winapi visual-c++