Вызов 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 вызывается при первом запуске программы (поэтому компьютер не может заблокироваться), вызывается, когда пользователь блокирует компьютер, чтобы разрешить переход экрана в спящий режим, и снова, когда он разблокируется, чтобы возобновить блокировку компьютера из-за неактивности.

Сначала он работает нормально, но не после того, как компьютер был заблокирован и разблокирован. Есть ли сброс этого параметра, который все равно происходит автоматически? Я посмотрел на документацию, но я не могу найти ничего о том, что происходит, если компьютер заблокирован вручную (кроме того, он не отменяет ввод пользователя). Должен ли я вызывать функцию изменения состояния только при разблокировке или нет вообще?

0 ответов

Другие вопросы по тегам