以下代码允许我阻止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分钟,看它是否空闲(我的电源选项被组策略锁定)。
答案 0 :(得分:2)
如何将通话的返回值保存到SetThreadExecutionState
? documentation说:
如果函数成功,则返回值是先前的线程执行状态。
所以你可以写下来似乎是合理的:
private EXECUTION_STATE SavedState;
SavedState = SleepUtil.SetThreadExecutionState(...);
SavedState
包含之前的值。因此,您似乎可以通过写作来解决问题:
SleepUtil.SetThreadExecutionState(SavedState);
您甚至可以检查返回值(SavedState
)以确定默认值,然后使用...
至少,这是我先尝试的。