Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы с режимом ожидания Windows 10 для приложений на Delphi 7

Delphi , ОС и Железо , Windows

Вопрос, который стоит перед разработчиками, применяющими технологии Delphi и Pascal, заключается в возможности перевода компьютера с операционной системой Windows 10 в режим ожидания (Standby mode) из приложения, написанного на Object Pascal. Код, который работал корректно в операционных системах XP и Windows 7, в Windows 10 приводил к полному выключению устройства. В данной статье мы рассмотрим, как решить эту проблему.

Описание проблемы

Код, написанный на Object Pascal и предназначенный для работы с функцией SetSuspendState, которая находится в динамической библиотеке POWRPROF.dll, успешно использовался в операционных системах XP и Windows 7 для перевода компьютера в режим ожидания. Однако в Windows 10 применение этой функции приводило к полному выключению устройства, что является нежелательным поведением.

Попытки симуляции нажатия клавиши "Sleep" с помощью функции keybd_event также не увенчались успехом, так как событие не фиксировалось приложением.

Исследование проблемы

После тщательного анализа было выявлено, что код, использующий SetSuspendState, работает в Windows 10, но не на всех устройствах. Например, на настольном компьютере с процессором AMD и установленной версией Windows 10 (1709) код работал корректно, даже после обновления системы. На четырех разных планшетах с процессорами Intel Atom результаты были различными: одно устройство не реагировало, два выключались, одно переходило в режим гибернации. Даже простой .BAT файл для перевода устройства в режим ожидания не работал.

Подтвержденное решение

Исследование показало, что проблема связана с конфигурацией питания и проблемами драйверов операционной системы Windows 10. В качестве решения было предложено обойти проблему, симулируя нажатие клавиши "Sleep" на клавиатуре. Однако, наиболее эффективным решением оказалась отправка сигнала на отключение монитора:

SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);

Этот код использует функцию SendMessage для отправки сообщения всем окнам (HWND_BROADCAST) с системной командой SC_MONITORPOWER и значением 2, которое указывает операционной системе отключить монитор. Это действие приводит к переходу компьютера в режим ожидания без полного выключения.

Пример кода

procedure TForm1.Button1Click(Sender: TObject);
begin
  SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
end;

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

Выводы

Для корректной работы с режимом ожидания в Windows 10 из приложений, написанных на Delphi, следует использовать функцию SendMessage для отправки команды на отключение монитора. Это решение является эффективным и не зависит от специфических настроек питания или драйверов устройства.

Создано по материалам из источника по ссылке.

Проблема заключается в необходимости перевести компьютер с Windows 10 в режим ожидания из приложения на Delphi 7, что ранее работало в Windows XP и 7, но в Windows 10 приводило к нежелательному полному выключению устройства, и решение заключается в испол


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 11:14:03/0.0065279006958008/0