获取正在运行的metro应用程序的进程ID

时间:2012-03-22 14:55:02

标签: c++ windows-8 microsoft-metro windows-runtime

我想通过C ++代码从另一个进程以编程方式获取正在运行的Metro应用程序的进程ID。我有该应用程序的静态信息,如名称,全名等。这样做的API是什么? 我无法使用EnumProcess,因为正在运行的Metro应用程序正在应用程序容器WWAHost.exe中运行,因此我无法知道哪个正在运行的WWAHost.exe进程实际上正在运行我的 Metro App。 / p>

在进程资源管理器中,我注意到正在执行Metro应用程序的WWAHost.exe进程的当前目录与metro应用程序安装位置相同。这可能是所有正在运行的应用容器之间的区别因素吗?如果是,获取另一个进程的当前目录的方法是什么?

要更新,我在msdn论坛上有一些解决方案。这是链接:

http://social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/c9665bf4-00e4-476c-badb-37126efd3f4b/

但是,该解决方案在Windows上使用未记录的机制来获取另一个进程的当前目录。我想在没有其他办法的情况下使用该解决方案。

4 个答案:

答案 0 :(得分:2)

使用 GetForegroundWindow 获取当前活动窗口,之后使用 GetWindowThreadProcessId 获取当前窗口的PID,然后有效,如果是具有 IsImmersiveProcess的WindowsStore应用程序,然后 GetPackageId 获取应用包信息,例如包名称,版本......

答案 1 :(得分:1)

您可以使用GetCurrentProcessId获取进程ID。

答案 2 :(得分:1)

您希望在每个WWAHost流程上调用GetApplicationUserModelId

提供的示例应用程序允许您传入PID并获取有关应用程序的信息。例如:

C:\src\GetAppInfo\Debug>GetAppInfo.exe 7400
Process 7400 (handle=00000044)
Microsoft.BingWeather_8wekyb3d8bbwe!App

答案 3 :(得分:0)

您可以使用GetPackageIdGetPackagePath,然后从AppxManifest.xml中读取有关应用的信息