Функция SetThreadExecutionState (winbase.h)
Позволяет приложению сообщить системе, что оно используется, тем самым предотвращая переход системы в спящий режим или отключение дисплея во время работы приложения.
Синтаксис
EXECUTION_STATE SetThreadExecutionState(
[in] EXECUTION_STATE esFlags
);
Параметры
[in] esFlags
Требования к выполнению потока. Этот параметр может быть одним или несколькими из следующих значений.
Возвращаемое значение
Если функция выполняется успешно, возвращается предыдущее состояние выполнения потока.
Если функция завершается сбоем, возвращается значение NULL.
Комментарии
Система автоматически обнаруживает такие действия, как ввод с помощью локальной клавиатуры или мыши, активность сервера и изменение фокуса окна. К действиям, которые не обнаруживаются автоматически, относятся активность диска или ЦП и видеотрансляции.
Вызов SetThreadExecutionState без ES_CONTINUOUS просто сбрасывает таймер простоя; Чтобы сохранить отображение или систему в рабочем состоянии, поток должен периодически вызывать SetThreadExecutionState .
Для правильной работы на управляемом компьютере приложения, такие как факс-серверы, автоответы, агенты резервного копирования и приложения управления сетью, должны использовать при обработке событий как ES_SYSTEM_REQUIRED , так и ES_CONTINUOUS . Мультимедийные приложения, такие как видеоплееры и приложения для презентаций, должны использовать ES_DISPLAY_REQUIRED при отображении видео в течение длительного времени без участия пользователя. Приложениям, таким как текстовые процессоры, электронные таблицы, браузеры и игры, не нужно вызывать SetThreadExecutionState.
Значение ES_AWAYMODE_REQUIRED следует использовать только в том случае, если это абсолютно необходимо для приложений мультимедиа, которым требуется, чтобы система выполняла фоновые задачи, такие как запись телевизионного содержимого или потоковая передача мультимедиа на другие устройства, пока система, как представляется, в спящем режиме. Приложения, которые не требуют критической фоновой обработки или работают на портативных компьютерах, не должны включать режим "вне сети", так как это не позволяет системе экономить энергию, включив режим истинного спящего режима.
Чтобы включить режим "нет", приложение использует как ES_AWAYMODE_REQUIRED , так и ES_CONTINUOUS; Чтобы отключить режим "нет", приложение вызывает SetThreadExecutionState с ES_CONTINUOUS и очищает ES_AWAYMODE_REQUIRED. Если включен режим "нет", любая операция, которая переводит компьютер в спящий режим, переводит его в отключенный режим. Компьютер, как представляется, в спящем режиме, пока система продолжает выполнять задачи, не требующие ввода данных пользователем. Режим Away не влияет на таймер простоя в спящем режиме; Чтобы предотвратить переход системы в спящий режим по истечении срока действия таймера, приложение также должно задать значение ES_SYSTEM_REQUIRED .
Функцию SetThreadExecutionState нельзя использовать, чтобы запретить пользователю переход компьютера в спящий режим. Приложения должны учитывать, что пользователь ожидает определенного поведения при закрытии крышки на ноутбуке или нажатии кнопки питания.
Эта функция не останавливает выполнение заставки.
Примеры
// Television recording is beginning. Enable away mode and prevent
// the sleep idle time-out.
//
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_AWAYMODE_REQUIRED);
//
// Wait until recording is complete...
//
//
// Clear EXECUTION_STATE flags to disable away mode and allow the system to idle to sleep normally.
//
SetThreadExecutionState(ES_CONTINUOUS);
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | winbase.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |