在锁定PC之前调用SetThreadExecutionState

时间:2017-02-13 17:11:48

标签: c# kernel32

我有一个程序,当用户锁定和解锁他们的计算机时会触发evens。我已经添加了一个功能,以便在用户需要时通过调用以下代码来保持PC唤醒和解锁:

private void changeUnlockState()
{
    uint status = NativeMethods.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED);    //Call ex state method with correct flags
    if (status == 0)
    {
        couldNotChangeStateError();
    }
}

internal static class NativeMethods
{
    [DllImport("kernel32.dll")]
    public static extern uint 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
    // Legacy flag, should not be used.
    // ES_USER_PRESENT = 0x00000004
}

当程序首次启动时调用函数changeUnlockState(因此计算机无法锁定),当用户锁定计算机以允许屏幕进入睡眠状态时调用函数{,并且当它们解锁时再次调用由于不活动而恢复未锁定计算机。

它最初工作正常,但计算机锁定和解锁后却没有。是否有一些自动重置的参数会自动发生?我查看了documentation,但是如果计算机被手动锁定(除了它不会覆盖用户输入),我找不到任何结果。我应该只在解锁时调用更改状态功能,还是根本不调用?

0 个答案:

没有答案