5

Вопрос по winapi, c++ – Какую строку кода я могу использовать в C ++ для отключения энергосбережения?

Я хочу предотвратить переход монитора в спящий режим (настройка окна, а не настройка монитора). Я использую с ++. Какой звонок мне сделать?

  • Error: User Rate Limit Exceeded

    от
  • Но установка тайм-аута заставки не требуется, если вы установите состояние выполнения потока в ES_DISPLAY_REQUIRED. Что если пользователь захочет изменить настройки экранной заставки во время работы приложения?

    от
  • В отличие от не работает? Это то, что рекомендует MSDN.

    от
  • хорошее использование RAII

    от
  • Будет ли это работать?

    от Nathan Lawrence
  • 13

    Code:

    class KeepDisplayOn
    {
    public:
        KeepDisplayOn()
        {
            mPrevExecState = ::SetThreadExecutionState(ES_DISPLAY_REQUIRED | ES_SYSTEM_REQUIRED | ES_CONTINUOUS);
            ::SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0, &mPrevScreenSaver, 0);
            ::SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, FALSE, NULL, 0);
        }
    
        ~KeepDisplayOn()
        {
            ::SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT, mPrevScreenSaver, NULL, 0);
            ::SetThreadExecutionState(mPrevExecState);
        }
    
    private:
        UINT                mPrevScreenSaver;
        EXECUTION_STATE     mPrevExecState;
    };
    

  • 3

    SetThreadExecutionState(ES_DISPLAY_REQUIRED|ES_CONTINUOUS);

  • 1

    Мигайте мышью каждую минуту или около того.

    mouse_event(MOUSEEVENTF_MOVE,1,0,0,0);
    mouse_event(MOUSEEVENTF_MOVE,-1,0,0,0);
    Sleep(60000);
    

  • 5

    Более простой способ

    который не изменяет состояние глобальной системы, как первый ответ:

    В вашей оконной процедуре добавьте обработчик дляWM_SYSCOMMAND, Когда wParamSC_MONITORPOWERвернуть 0 вместо отсрочкиDefWindowProc, (Если wParam - это любое другое значение, убедитесь, что вы обрабатываете сообщение или передаете егоDefWindowProc, В противном случае пользователь будет испытывать трудности при настройке вашего окна во время выполнения.)