Нужно отключить заставку / блокировку экрана в Windows C # /. Net [закрыто]

StackOverflow https://stackoverflow.com/questions/241222

  •  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 ...

попробуйте сделать ваше верхнее значение формы верным , оно работает для меня, заставка не появлялась даже после простоя ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top