1

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

失败的尝试和观察

  • OpenProcess() 并调用 Call GetPackageId()检查!= APPMODEL_ERROR_NO_PACKAGE:这似乎适用于某些进程,而其他进程(例如 Chrome)在 Metro 模式下运行时无法通过检查。
  • Metro 应用似乎总是由 svchost.exe 托管(例如它们的父级)

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

4

2 回答 2

1

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

于 2013-07-24T23:23:08.930 回答
0

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

这听起来可能有点杂乱无章,但对我检测 IE 是否处于 Metro 模式很有用。Metro模式下的IE进程仍然是iexplore.exe。Metro 模式下的根父进程是 Wininit.exe,非 Metro 模式下是 explorer.exe。因此,找到 IE PID 的根父 PID,然后从父 PID 获取父进程名称,然后将其与“Wininit.exe”或“Explorer.exe”进行比较

于 2013-07-24T19:56:06.823 回答