【问题标题】:Windows 8/10 API Detect suspended processWindows 8/10 API 检测挂起的进程
【发布时间】:2018-05-03 20:55:25
【问题描述】:

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

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

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

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

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

吉姆

【问题讨论】:

标签: windows process power-management api


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-10-14
    • 2020-02-06
    • 2012-07-26
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    相关资源
    最近更新 更多