I should not display certain context menu options if one process is not running?.
I am checking if the process is running or not using the process name.
But the issue is, the process name is showing different way in different windows platforms.
ie, windows 64 bit process name on windows task bar is ” applicationname.exe“
some windows xp machine shows the same process name as “applica~2.exe“
Please let me know the consistent way to check if the process is running or not?
My development environment is C++ and 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;
}
EnumProcessesis the other way to enumerate active processes.The difference is that you need to allocate the space for PIDs,call
EnumProcesses, open each process withPROCESS_QUERY_INFORMATIONaccess flag and then callGetProcessImageFileNameon it’s handle and do the comparison.