如何获得所有进程id相关(他们都是一个程序的进程)

MFC - How to get all process id related (they are all process of one program)

本文关键字:进程 程序 一个 他们 何获得 id 相关      更新时间:2023-10-16

我正在使用Visual Studio 2010,构建MFC应用程序。

我有一个问题:如何获得一个程序的所有进程ID。

示例:我运行VMware Workstation程序,所有进程为:VMware -unity-helper.exe, VMware .exe。

现在我想要得到它们的id。我该怎么做呢?由于

要做到这一点并不容易,除非VMWare在某处发布有关其进程的信息。

如果您知道进程的名称,您可以扫描所有启动的进程(http://msdn.microsoft.com/en-us/library/windows/desktop/ms686832(v=vs.85).aspx)并找到您需要的进程。进程数为100 ~ 1000。这意味着迭代将不会花费太长时间。

一种解决方法是,遍历所有进程并搜索名称包含vmware的进程它展示了如何获取进程id和名称。http://msdn.microsoft.com/en-us/library/windows/desktop/ms682623%28v=vs.85%29.aspx

没有办法达到你的要求。
对于你的vmware的例子,你可以枚举所有的进程,并匹配他们的名字与"vmware",但有一些其他的程序不匹配的规则,(例如,如果你想找到Visual Studio进程,它的名字是devenv.exe,他们没有任何关系。)

为你的目标。您可以参考以下信息。

  • 准备预定义的配置文件。
  • 研究感兴趣的程序,找到它们相关的进程名,使用map存储到配置文件中。
  • 当你想要得到进程id时,查询你的配置文件并得到相关的进程名,迭代所有正在运行的进程并匹配它们。
  • 当程序改变其进程或想要添加新的程序支持时,需要维护您的配置文件。

如果所有进程都包含某种类型的"基"名,则可以使用正则表达式。

Else,如果您正在查找进程之间的子/父连接(哪个进程启动了哪个进程);那么WIN32 EnumProcesses和Process32First的组合应该可以做到这一点。Process32First以PROCESSENTRY32结构返回数据,该结构包含父节点的PID th32ParentProcessID。