2

我有一个可以播放某种媒体的应用程序,我不希望计算机在我的应用程序运行时休眠。我四处搜寻,才知道这可以通过 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
        }

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

4

2 回答 2

4

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

于 2012-04-07T06:55:05.667 回答
3

设置线程执行状态

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

于 2012-04-07T07:02:14.267 回答