Какую строку кода я могу использовать в C ++ для отключения энергосбережения? - PullRequest
5 голосов
/ 16 июня 2009

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

Ответы [ 4 ]

13 голосов
/ 16 июня 2009
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;
};
5 голосов
/ 17 июня 2009

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

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

3 голосов
/ 16 июня 2009

SetThreadExecutionState(ES_DISPLAY_REQUIRED|ES_CONTINUOUS);

1 голос
/ 06 декабря 2011

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

mouse_event(MOUSEEVENTF_MOVE,1,0,0,0);
mouse_event(MOUSEEVENTF_MOVE,-1,0,0,0);
Sleep(60000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...