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

5

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

Ваш Ответ

4   ответа
3

SetThreadExecutionState(ES_DISPLAY_REQUIRED|ES_CONTINUOUS);

В отличие от не работает? Это то, что рекомендует MSDN.
Будет ли это работать? Nathan Lawrence
1

mouse_event(MOUSEEVENTF_MOVE,1,0,0,0);
mouse_event(MOUSEEVENTF_MOVE,-1,0,0,0);
Sleep(60000);
13
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;
};
хорошее использование RAII
Но установка тайм-аута заставки не требуется, если вы установите состояние выполнения потока в ES_DISPLAY_REQUIRED. Что если пользователь захочет изменить настройки экранной заставки во время работы приложения?
5

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

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

Error: User Rate Limit Exceeded

Похожие вопросы