Программно сбросить время простоя Windows XP

Windows сбрасывает время простоя каждый раз, когда пользователь касается клавиатуры или мыши. Мое приложение должно сбросить время простоя в определенные моменты, но я не могу понять, как это сделать программно.

следующее не сбрасывает время простоя с помощью VB, C# или QT4.
- Программное движение мыши / щелчок.
- Программное нажатие клавиши.
Каким-то образом Windows знает, что эти действия имитируются.

Как я могу сбросить время простоя? Любой мысли будут высоко оценены!

3 ответов


использовать SetThreadExecutionState(). Параметр ES_SYSTEM_REQUIRED (2) сбрасывает таймер простоя системы. Визит pinvoke.net для требуемых деклараций.


Если вам нужен дисплей, чтобы остаться, например, вы бы вызвать SetThreadExecutionState(ES_DISPLAY_REQUIRED|ES_CONTINUOUS);

на 2000 / XP вы можете использовать флаг ES_USER_PRESENT (не работает на Vista+)

чтобы отключить экранную заставку, вы можете обработать SC_SCREENSAVE WM_SYSCOMMAND (вы должны быть окном переднего плана, иначе используйте SystemParametersInfo)


в принципе SetThreadExecutionState () должен делать то, что вам нужно. Но я обнаружил, что он не работает с флагом требуемой системы в некоторых ситуациях на некоторых современных окнах. Извините, я не могу вспомнить точные детали.

в качестве резервного вы можете просто подделать некоторые входные данные, вызвав SendInput () с нулевым сообщением перемещения мыши, например. Я предполагаю, что ваша подделка ввода не удалась, потому что вы вызвали SendMessage или PostMessage.