1

下面的代码允许我防止 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 分钟,看看它是否空闲(我的电源选项被组策略锁定)。

4

1 回答 1

2

如何将调用的返回值保存到SetThreadExecutionState文档说:

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

所以你可以这样写似乎是合理的:

private EXECUTION_STATE SavedState;

SavedState = SleepUtil.SetThreadExecutionState(...);

SavedState包含先前的值。所以看起来你可以通过写来把事情放回去:

SleepUtil.SetThreadExecutionState(SavedState);

您甚至可以检查返回值 ( SavedState) 以确定默认值是什么,并使用它...

至少,这是我首先要尝试的。

于 2013-04-10T21:49:18.647 回答