防止和重新启用Windows空闲状态

时间:2013-04-10 20:26:12

标签: c#

以下代码允许我阻止Windows进入空闲状态,并防止我的机器自行锁定:

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

public static void PreventSleep()
{
    if (SleepUtil.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS
            | EXECUTION_STATE.ES_DISPLAY_REQUIRED
            | EXECUTION_STATE.ES_SYSTEM_REQUIRED
            | EXECUTION_STATE.ES_AWAYMODE_REQUIRED) == 0) 
            SleepUtil.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS
                | EXECUTION_STATE.ES_DISPLAY_REQUIRED
                | EXECUTION_STATE.ES_SYSTEM_REQUIRED); 
    }

这很好用,但是我需要做些什么来重新启用空闲?我一直在搞乱一些事情,但每次尝试时,我都要离开笔记本电脑10分钟,看它是否空闲(我的电源选项被组策略锁定)。

1 个答案:

答案 0 :(得分:2)

如何将通话的返回值保存到SetThreadExecutionStatedocumentation说:

  

如果函数成功,则返回值是先前的线程执行状态。

所以你可以写下来似乎是合理的:

private EXECUTION_STATE SavedState;

SavedState = SleepUtil.SetThreadExecutionState(...);

SavedState包含之前的值。因此,您似乎可以通过写作来解决问题:

SleepUtil.SetThreadExecutionState(SavedState);

您甚至可以检查返回值(SavedState)以确定默认值,然后使用...

至少,这是我先尝试的。