Windows 8/10 API 检测挂起的进程. Windows 8/10 中的



UWP(或"Metro"(应用在不在前台时经常被挂起。处于此状态的应用将继续存在,但不再消耗 CPU 时间。引入此更改似乎是为了提高平板电脑和手机等低功耗/存储设备的性能。

请问,在这种状态下检测应用程序的最优雅和最简单的方法是什么?

我目前可以看到 2 种可能的解决方案:

  1. 调用 NtQuerySystemInformation(( 并枚举每个进程和每个线程。如果所有线程都处于挂起状态,则进程将"挂起"。这种方法将需要大量的代码,而且至关重要的是,NtQuerySystemInformation((只是半文档化的,可以在未来的操作系统中删除。

  2. 调用 GetProcessTimes(( 并记录每个进程的计数器。等待一段时间(分钟(,然后再次检查这些。如果进程计数器未更改,则假定进程已挂起。这是一个黑客,我甚至可能因为想到它而被击落。

吉姆

第二个 (GetProcessTimes(( ...等。。。并再次检查这些。 如果进程计数器未更改,则假设进程已挂起( 不太可靠。 如果进程正在等待输入(例如,键盘、鼠标或网络( 并且没有得到任何东西,它将使用很少的 CPU 时间 并且似乎被这种方法暂停了。

最新更新