Как предотвратить заставки и спит во время выполнения моей программы? - PullRequest
12 голосов
/ 08 сентября 2010

В программе на С ++, работающей на Win7, есть ли способ имитировать движение мыши или что-то в этом роде, просто чтобы экранная заставка не запускалась и система не засыпала?Я ищу минимальный подход и предпочитаю не использовать .NET.Спасибо -nuun

Ответы [ 5 ]

30 голосов
/ 08 сентября 2010

Не связывайтесь с настройками заставки, используйте SetThreadExecutionState . Это API для информирования окон о том, что ваше приложение активно:

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

и

Мультимедийные приложения, такие как видео плееры и презентационные приложения, должен использовать ES_DISPLAY_REQUIRED, когда они показывать видео в течение длительных периодов времени без ввода пользователя

1 голос
/ 08 сентября 2010

Это неплохая идея, любой приличный медиаплеер делает это ... Ищите функцию SystemParametersInfo(SPI_SETSCREENSAVEACTIVE ...) в Win32 API, она должна сработать.

0 голосов
/ 28 января 2019

Перед тем, как Windows запускает заставку, она отправляет приложениям уведомление SC_SCREENSAVE в сообщении WM_SYSCOMMAND.Если приложение хочет запретить запуск заставки, оно должно установить флаг «handled» в значение true и вернуть ноль во время обработки сообщения.Также имеется SC_MONITORPOWER для предотвращения перехода дисплея в состояние низкого энергопотребления.

https://docs.microsoft.com/en-us/windows/desktop/menurc/wm-syscommand

0 голосов
/ 08 сентября 2010

Это обычно особенно плохая идея.Рабочий стол принадлежит пользователю вашего приложения, , а не вашего приложения.

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

И, если вы являетесь пользователем, не делаетеэто в вашем приложении.Измените его вручную, как и все мы: -)

Если вы должны сделать это (и я призываю вас не делать этого, но вы можете не обращать на это внимания), я недумаю, что метод изменился с NT.Вы используете SystemParametersInfo с SPI_SETSCREENSAVEACTIVE, чтобы изменить поведение.Это в user32.dll по памяти.

Но у меня есть смутные воспоминания о проблемах, возникших при использовании этого метода в Win7, и я думаю, что решением было изменение реестра, установив ScreenSaveActive в HKEY_CURRENT_USER\Control Panel\Desktop в 0 (и обратно в * 1025).* когда вы закончите).

0 голосов
/ 08 сентября 2010

Я не слишком уверен, почему вы должны прибегнуть к этому.Простое отключение этих опций в настройках питания подойдет.

Чего вы пытаетесь достичь, делая это.Является ли ваше приложение услугой.В этом случае вам не нужно об этом беспокоиться.

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

В любом случае нам нужна дополнительная информация.

...