procedure TForm1.Button1Click(Sender: TObject);
var
SysPowerStatus: TSystemPowerStatus;
begin
GetSystemPowerStatus(SysPowerStatus);
if Boolean(SysPowerStatus.ACLineStatus) thenbegin
ShowMessage('System running on AC.');
endelsebegin
ShowMessage('System running on battery.');
ShowMessage(Format('Battery power left: %d percent.', [SysPowerStatus.BatteryLifePercent]));
end;
end;
Here's the translation of the provided text into Russian:
Вот процедура в Delphi, которая получает текущий статус питания системы и отображает, работает ли она на электричестве сети или батарейном питании, а также процент оставшегося ресурса батареи.
Обзор того, что код делает:
Он объявляет переменную SysPowerStatus типа TSystemPowerStatus, который является структурой, предоставленной Windows для получения информации о текущем статусе питания.
Процедура вызывает функцию GetSystemPowerStatus, передавая SysPowerStatus как параметр вывода. Функция получает текущий статус питания и заполняет структуру SysPowerStatus.
Затем она проверяет, является ли свойство ACLineStatus структуры SysPowerStatus истинным. Если это так, то это означает, что система работает на электричестве сети, поэтому она отображает сообщение, говорящее "Система работает на электричестве сети.".
Если ACLineStatus ложно, то это означает, что система работает на батарейном питании. В этом случае она отображает два сообщения: одно, говорящее "Система работает на батарейном питании.", и другое, отображающее процент оставшегося ресурса батареи, форматированный как строка с помощью функции Format.
Альтернативное решение, использующее более современный подход:
procedure TForm1.Button1Click(Sender: TObject);
var
PowerStatus: TPowerStatus;
begin
PowerStatus := GetSystemPowerStatus;
if PowerStatus.ACLineStatus then
ShowMessage('Система работает на электричестве сети.')
else
begin
ShowMessage('Система работает на батарейном питании.');
ShowMessage(Format('Прогнозированный ресурс батареи: %d процентов.', [PowerStatus.BatteryLifePercent]));
end;
end;
function GetSystemPowerStatus: TPowerStatus;
var
Buffer: array[0..127] of Byte;
begin
FillChar(Buffer, SizeOf(Buffer), 0);
PowerGetSystemPowerStatus(Buffer, SizeOf(Buffer));
Result := TPowerStatus.Create(Buffer^);
end;
В этом альтернативном решении я создал новую функцию GetSystemPowerStatus, которая вызывает Windows API-функцию PowerGetSystemPowerStatus для получения статуса питания. Функция возвращает буфер байтов, который затем конвертируется в объект TPowerStatus с помощью конструктора.
Остальная часть кода остается той же, но это решение более современное и легче для чтения.
В статье описывается процедура на языке Delphi, которая позволяет получать информацию о состоянии питания компьютера и выводить ее в виде сообщения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.