Нужно отключить заставку / блокировку экрана в Windows C # /. Net [закрыто]
-
04-07-2019 - |
Вопрос
Для определенного приложения мне нужно отключить заставку во время ее работы. Оператор МОЖЕТ отключить его вручную, а затем снова включить, но проще всего будет просто держать экранную заставку на расстоянии, пока приложение работает.
Как мне это сделать? Я нашел код для фактического отключения заставки с помощью SPI_SETSCREENSAVEACTIVE, но я не думаю, что это то, чего я хочу.
Решение
<код> SetThreadExecutionState (ES_DISPLAY_REQUIRED) код> . Р>
Используется видеопроигрывателями и PowerPoint.
Другие советы
[FlagsAttribute]
public enum EXECUTION_STATE : uint
{
ES_SYSTEM_REQUIRED = 0x00000001,
ES_DISPLAY_REQUIRED = 0x00000002,
// Legacy flag, should not be used.
// ES_USER_PRESENT = 0x00000004,
ES_AWAYMODE_REQUIRED = 0x00000040,
ES_CONTINUOUS = 0x80000000,
}
public static class SleepUtil
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
}
public void PreventSleep()
{
if (SleepUtil.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS
| EXECUTION_STATE.ES_DISPLAY_REQUIRED
| EXECUTION_STATE.ES_SYSTEM_REQUIRED
| EXECUTION_STATE.ES_AWAYMODE_REQUIRED) == 0) //Away mode for Windows >= Vista
SleepUtil.SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS
| EXECUTION_STATE.ES_DISPLAY_REQUIRED
| EXECUTION_STATE.ES_SYSTEM_REQUIRED); //Windows < Vista, forget away mode
}
Кредит: P / Invoke , deadpoint
SystemParametersInfo с SPI_SETSCREENSAVEACTIVE - это нормальный способ сделать это. Однако это не отключает блокировку экрана.
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS
| EXECUTION_STATE.ES_DISPLAY_REQUIRED
| EXECUTION_STATE.ES_SYSTEM_REQUIRED);
Это не полезно в XP.
Фактически, эта функция не работает в разных версиях Windows (хотя она работает довольно хорошо в Windows Vista или выше) ... В Windows XP / 2003 эта функция должна вызываться с помощью ES_USER_PRESENT | ES_CONTINUOUS (должны вызываться оба) ... Это будет периодически сбрасывать таймеры простоя системы и дисплея ... В других версиях Windows рекомендуется использовать ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED | ES_CONTINUOUS | ES_AWAYMODE_REQUIRED ...
попробуйте сделать ваше верхнее значение формы верным , оно работает для меня, заставка не появлялась даже после простоя ...