Windows 8/10 API检测暂停进程

时间:2018-05-03 20:55:26

标签: windows process power-management api

Windows 8/10中的UWP(或“Metro”)应用程序在不在前台时经常被暂停。处于此状态的应用程序继续存在,但不再消耗CPU时间。这种变化似乎已被引入以提高平板电脑和手机等低功耗/存储设备的性能。

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

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

  1. 调用NtQuerySystemInformation()并枚举每个进程和每个线程。如果所有线程都处于挂起状态,则进程被“挂起”。这种方法需要大量代码,而且关键是NtQuerySystemInformation()只是半文档化的,可以在未来的操作系统中删除。 NtQueryInformationProcess()也可能提供具有相同问题的解决方案。

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

  3. 吉姆

1 个答案:

答案 0 :(得分:-1)

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