В программе С++, запущенной на Win7, есть ли способ подделать движение мыши или что-то в этом роде, просто чтобы запустить заставку и система переспала? Я ищу минимальный подход, и я предпочитаю не использовать .NET. Благодаря, -nuun
Как я могу предотвратить сбережения экрана и спать во время выполнения моей программы?
Ответ 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
Я не слишком уверен, почему вы должны прибегать к этому. Простое отключение этих параметров в настройке мощности будет выполнено.
Чего вы пытаетесь достичь, делая это. Является ли ваше приложение сервисом. В этом случае вам не нужно беспокоиться об этом.
В случае, если ваше приложение является приложением для пользовательского интерфейса, я также не думаю о допустимом прецеденте.
В любом случае нам нужна дополнительная информация.