防止电脑休眠

Posted

技术标签:

【中文标题】防止电脑休眠【英文标题】:Preventing computer from sleeping 【发布时间】:2012-04-07 06:42:19 【问题描述】:

我有一个可以播放某种媒体的应用程序,我不希望计算机在我的应用程序运行时进入睡眠状态。我四处寻找,才知道这可以通过 P/Invoke 来完成。

显示器也不应关闭,计算机也不应进入睡眠状态。所以,我做了以下测试:

b.Click += (x, y) =>
                
                    SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_AWAYMODE_REQUIRED);
                    Debug.WriteLine("Power line executed");
                ;

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

        [FlagsAttribute]
        public enum EXECUTION_STATE : uint
        
            ES_AWAYMODE_REQUIRED = 0x00000040,
            ES_CONTINUOUS = 0x80000000,
            ES_DISPLAY_REQUIRED = 0x00000002,
            ES_SYSTEM_REQUIRED = 0x00000001
        

但是,电脑在一段时间后仍然进入睡眠状态。这里缺少什么?

【问题讨论】:

您可能会在 SuperUser 获得更好的答案。 @David,他正在寻找程序化解决方案。 C#: How to prevent a laptop from going into Stand-By 的可能重复项 【参考方案1】:

XP 不支持离开模式。使用连续 |显示 |改为系统。

【讨论】:

好吧,没关系,你的用户运行什么很重要。如果您仍然遇到问题,请在控制面板 + 电源中查找供应商添加的内容并将其搞砸。 我虽然这个页面pinvoke.net/default.aspx/kernel32/SetThreadExecutionState.html 只提到了带有ContinuousDisplay Required 标志的监视器电源关闭。这是正确的还是ContinousDisplay Required 也会阻止睡眠?对我来说:这不起作用,计算机仍在睡眠,我使用的是标准家庭操作系统,默认电源设置。【参考方案2】:

SetThreadExecutionState

要启用离开模式,应用程序同时使用 ES_AWAYMODE_REQUIRED 和 ES_CONTINUOUS;要禁用离开模式,应用程序使用 ES_CONTINUOUS 调用 SetThreadExecutionState 并清除 ES_AWAYMODE_REQUIRED。启用离开模式后,任何会使计算机进入睡眠状态的操作都会将其置于离开模式。当系统继续执行不需要用户输入的任务时,计算机似乎处于睡眠状态。 离开模式不影响睡眠空闲定时器;为防止系统在计时器到期时进入睡眠状态,应用程序还必须设置 ES_SYSTEM_REQUIRED 值

【讨论】:

以上是关于防止电脑休眠的主要内容,如果未能解决你的问题,请参考以下文章

苹果电脑休眠怎么唤醒

防止休眠软件——Lungo for Mac推荐给大家

电脑休眠怎么唤醒?

惠普电脑休眠怎么唤醒

电脑的休眠和睡眠有啥区别

电脑的待机,休眠,和睡眠有啥区别,哪个更省电