如何检测是不是有任何进程阻止 Windows 进入睡眠状态?
Posted
技术标签:
【中文标题】如何检测是不是有任何进程阻止 Windows 进入睡眠状态?【英文标题】:How to detect if any of the process prevents Windows from sleep?如何检测是否有任何进程阻止 Windows 进入睡眠状态? 【发布时间】:2020-09-14 05:21:12 【问题描述】:我想检查是否有任何进程/应用程序使用任何方法来保持 Windows 系统处于唤醒状态。
我发现有一个 API SetThreadExecutionState 可以做到这一点。
https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setthreadexecutionstate
即使我找到了这种 API,我仍然找不到获取状态的方法。
我认为视频播放器会使用 SetThreadExecutionState 来暂时保持系统唤醒。但文件也说
应用程序,例如文字处理器、电子表格、浏览器和 游戏不需要调用 SetThreadExecutionState。
作为 Windows 服务,我想确定他们是否将状态设置为 ON 或不包括不需要调用 SetThreadExecutionState 的应用程序。
【问题讨论】:
这些信息——如果有一些 API 可以得到它——一旦你拥有它,难道不是过时的吗?进程可以随时SetThreadExecutionState
。 (很像“文件存在”的问题是过时的问题)。
您需要确定是哪个进程阻止计算机进入睡眠状态。但是有很多条件会阻止计算机进入休眠状态,例如鼠标和键盘输入。由于范围太广,这可能是一个难以实现的想法。
除了用户输入,我想知道用户是在玩游戏还是在看视频。对我来说,最简单的方法是检测是否有任何应用程序使用“某些”API 来告诉操作系统即使没有用户输入也不会休眠。这就是目标。
【参考方案1】:
对我来说最简单的方法是检测是否有任何应用程序使用 “某些”API 告诉操作系统即使没有用户现在也不会休眠 输入。
这其实不是一个很简单的方法,detours可以做到,但前提是你需要花很多时间去学习如何使用。
Detours 是一个用于监控和检测 API 的软件包 在 Windows 上调用。 Detours 已被许多 ISV 使用,也被使用 由 Microsoft 的产品团队提供。 Detours 现在可以在 标准开源许可证 (MIT)。这简化了许可 程序员使用 Detours 并允许社区支持 Detours 使用开源工具和流程。
以源码形式分发:https://github.com/microsoft/Detours
相关:
Monitoring or disabling WinAPI functions
(Windows) Monitoring API calls in C
【讨论】:
以上是关于如何检测是不是有任何进程阻止 Windows 进入睡眠状态?的主要内容,如果未能解决你的问题,请参考以下文章
运行PowerShell进程时如何阻止Windows 10机器休眠/休眠?