通过PID检测在WinRT模式下运行的应用程序

时间:2012-08-28 21:59:31

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

概述
我需要通过进程/ PID检测给定的应用程序是否在WinRT(也称为“Metro”)模式下运行。这样做有好办法吗?

尝试和观察失败

  • OpenProcess()并调用Call GetPackageId()检查!= APPMODEL_ERROR_NO_PACKAGE:这似乎适用于某些进程,而其他用户(例如Chrome)在Metro模式下运行时检查失败。
  • Metro应用程序似乎始终由svchost.exe
  • 托管(例如其父级)

有什么想法吗?请省略任何“不要那样做”或“为什么?”答案,因为它们对这个特定问题没有帮助。

3 个答案:

答案 0 :(得分:1)

BOOL WINAPI IsImmersiveProcess(_In_  HANDLE hProcess);

如果进程在Metro模式下运行,则返回true。请注意,如果检测应用程序作为服务运行,则此调用始终返回false。

答案 1 :(得分:0)

Here使用Process和C#应用程序中与该进程关联的模块列表的一种可能解决方案。

答案 2 :(得分:0)

如果Metro应用程序正在运行WWA Applet,则从PID获取命令行参数并查看它是否为WWAHOST.exe。并非所有的metro应用程序都以WWA applet的形式运行,IE在Metro模式下作为独立的exe运行。

这可能听起来像一个kludge,但我在检测IE是否处于地铁模式时工作。 地铁模式下的IE进程仍然是iexplore.exe。它是Metro模式下的根父进程是Wininit.exe,其中非城域模式是explorer.exe。 因此,找到IE的PID的根父PID,然后从父的PID获取父进程名称,然后将其与“Wininit.exe”或“Explorer.exe”进行比较