我有一个应用程序有某种媒体播放,我不希望计算机在我的应用程序运行时睡眠。我四处搜索并知道这可以通过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
}
然而,一段时间后计算机仍然进入睡眠状态。这里缺少什么?
答案 0 :(得分:4)
XP不支持离开模式。使用连续|显示|系统改为。
答案 1 :(得分:3)
要启用离开模式,应用程序同时使用ES_AWAYMODE_REQUIRED和ES_CONTINUOUS;要禁用远程模式,应用程序使用ES_CONTINUOUS调用SetThreadExecutionState并清除ES_AWAYMODE_REQUIRED。启用离开模式后,任何使计算机进入睡眠状态的操作都会将其置于离开模式。当系统继续执行不需要用户输入的任务时,计算机似乎处于休眠状态。 离开模式不影响睡眠空闲计时器;为了防止系统在计时器到期时进入睡眠状态,应用程序还必须设置ES_SYSTEM_REQUIRED值。