防止电脑休眠
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 只提到了带有Continuous
和Display Required
标志的监视器电源关闭。这是正确的还是Continous
和Display Required
也会阻止睡眠?对我来说:这不起作用,计算机仍在睡眠,我使用的是标准家庭操作系统,默认电源设置。【参考方案2】:
SetThreadExecutionState
要启用离开模式,应用程序同时使用 ES_AWAYMODE_REQUIRED 和 ES_CONTINUOUS;要禁用离开模式,应用程序使用 ES_CONTINUOUS 调用 SetThreadExecutionState 并清除 ES_AWAYMODE_REQUIRED。启用离开模式后,任何会使计算机进入睡眠状态的操作都会将其置于离开模式。当系统继续执行不需要用户输入的任务时,计算机似乎处于睡眠状态。 离开模式不影响睡眠空闲定时器;为防止系统在计时器到期时进入睡眠状态,应用程序还必须设置 ES_SYSTEM_REQUIRED 值。
【讨论】:
以上是关于防止电脑休眠的主要内容,如果未能解决你的问题,请参考以下文章