如何防止Windows操作系统进入睡眠模式 - .Net

6

使用C#,如何防止Windows操作系统进入睡眠模式?

我知道可以关闭睡眠模式,这是我现在做的。这个问题是关于防止操作系统在程序长时间运行时进入睡眠模式。之后,再次启用进入睡眠模式。

2个回答

8
不建议应用程序更改电源设置——这是用户的偏好,应该按照他们的意愿进行。应用程序可以通知系统它需要保持唤醒状态,因为它正在执行不需要用户交互的任务。
系统进入睡眠状态的标准在此处详细说明:https://msdn.microsoft.com/en-us/library/windows/desktop/aa373233(v=vs.85).aspx。其中详细说明了应用程序可以调用本机函数 SetThreadExecutionState 以告知系统特定需求,这些需求会影响系统如何决定睡眠。如果您需要显示器无论是否有用户交互都保持可见,则应将 ES_DISPLAY_REQUIRED 参数发送到 SetThreadExecutionState
例如:
public enum EXECUTION_STATE : uint
{
    ES_AWAYMODE_REQUIRED = 0x00000040,
    ES_CONTINUOUS = 0x80000000,
    ES_DISPLAY_REQUIRED = 0x00000002,
}

internal class NativeMethods
{
    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
}

//...

NativeMethods.SetThreadExecutionState(EXECUTION_STATE.ES_DISPLAY_REQUIRED);

它不能在Windows 10专业版上运行,有什么想法吗? - Zinov
@Zinov 请参阅 https://learn.microsoft.com/en-gb/windows/win32/api/winbase/nf-winbase-setthreadexecutionstate?redirectedfrom=MSDN使用 SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED); 进行设置,并使用 SetThreadExecutionState(ES_CONTINUOUS); 恢复正常。以上要添加的枚举是 ES_SYSTEM_REQUIRED = 0x00000001 - Jay Croghan

3
我认为你可以通过定期调用带有ES_SYSTEM_REQUIRED参数的 SetThreadExecutionState 来防止系统进入睡眠模式。 这篇文章也可能会对你有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接