Вызов SetThreadExecutionState перед блокировкой ПК
У меня есть программа, которая запускает вечера, когда пользователь блокирует и разблокирует свой компьютер. Я добавил функцию, чтобы держать компьютер в активном и разблокированном состоянии, если пользователь хочет, вызвав следующий код:
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
вызывается при первом запуске программы (поэтому компьютер не может заблокироваться), вызывается, когда пользователь блокирует компьютер, чтобы разрешить переход экрана в спящий режим, и снова, когда он разблокируется, чтобы возобновить блокировку компьютера из-за неактивности.
Сначала он работает нормально, но не после того, как компьютер был заблокирован и разблокирован. Есть ли сброс этого параметра, который все равно происходит автоматически? Я посмотрел на документацию, но я не могу найти ничего о том, что происходит, если компьютер заблокирован вручную (кроме того, он не отменяет ввод пользователя). Должен ли я вызывать функцию изменения состояния только при разблокировке или нет вообще?