Подтвердить что ты не робот

Как я могу предотвратить сбережения экрана и спать во время выполнения моей программы?

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

4b9b3361

Ответ 1

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

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

и

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

Ответ 2

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

Ответ 3

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

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

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