C# 防止计算机睡眠

C# 防止计算机睡眠,c#,pinvoke,C#,Pinvoke,我有一个带有某种媒体播放功能的应用程序,我不希望应用程序运行时计算机处于睡眠状态。我四处搜索,发现这可以通过P/Invoke实现 显示器也不应关闭,计算机也不应进入睡眠状态。因此,我做了以下测试: b.Click += (x, y) => { SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_AWAYMODE_REQUI

我有一个带有某种媒体播放功能的应用程序,我不希望应用程序运行时计算机处于睡眠状态。我四处搜索,发现这可以通过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
        }

然而,过了一段时间,电脑仍然进入睡眠状态。这里缺少什么?

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


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

您可能会在SuperUser获得更好的答案。@David,他正在寻找一个编程解决方案。可能重复的问题不重要,用户运行的内容很重要。如果您仍然有问题,请在“控制面板+电源”中查找供应商添加的内容,并将其搞乱。我认为本页仅提及使用
连续
显示所需的
标志的监视器断电。这是正确的还是
连续
显示要求
也会阻止睡眠?对我来说:这不起作用,电脑仍处于休眠状态,我使用的是带有默认电源设置的标准家庭操作系统。