如何检测是不是有任何进程阻止 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机器休眠/休眠?

阻止特定进程的 Windows 错误报告 (DW20.exe) 窗口

如何检测变量是不是包含任何内容

如何检测 Windows 中打开的套接字?

如何检测Windows XP机器上是不是播放任何声音

如何检测文件夹是不是为空(Windows 批处理文件)?