我有一个程序,当用户锁定和解锁他们的计算机时会触发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,但是如果计算机被手动锁定(除了它不会覆盖用户输入),我找不到任何结果。我应该只在解锁时调用更改状态功能,还是根本不调用?