3

如果一个进程没有运行,我不应该显示某些上下文菜单选项?我正在检查进程是否正在运行或不使用进程名称。

但问题是,进程名称在不同的 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;
   }
4

3 回答 3

2

EnumProcesses是枚举活动进程的另一种方法。

不同之处在于您需要为 PIDs,call 分配空间,EnumProcesses使用访问标志打开每个进程,PROCESS_QUERY_INFORMATION然后调用GetProcessImageFileName它的句柄并进行比较。

于 2012-05-17T15:06:17.457 回答
1

使用 WMI 询问Win32_Process的实例允许您检查正在运行的进程的完整路径,以查找您需要查看的匹配项。

于 2012-05-17T15:26:02.507 回答
0

您是相关流程的作者吗?如果是这样,更稳健的设计将是使用 IPC 直接询问过程。这样,您不必进行轮询,也不会遇到烦人的问题,例如如果您检测到进程、创建上下文菜单然后进程停止会发生什么?

于 2012-05-17T15:13:21.993 回答