| Получить информацию об аккумуляторе |
|
| Написал Snowy | |
| 11.02.2009 | |
|
Для получения информации об аккумуляторе существует функция GetSystemPowerStatus. С её помощью можно узнать, работает ли компьютер в данный момент от сети или от батареи/UPS. Также позволяет узнать уровень заряда батарей, сколько осталось жить в процентах и в минутах. Также для полноценного мониторинга потребуется отлов сообщения WM_POWERBROADCAST, которое приходит каждый раз, при любом изменении состояния (переход на аккумулятор или наоборот, изменение заряда батареи) Подробно расписывать не буду. Далее приводится пример программы, которая вполне заменяет описание. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); private procedure PowerStatusChange(var Message: TMessage); message WM_POWERBROADCAST; procedure UpdateInfo(Info: TStrings); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin // При старте программы выводим текущую информацию UpdateInfo(Memo1.Lines); end; procedure TForm1.PowerStatusChange(var Message: TMessage); begin // Пришло сообщение WM_POWERBROADCAST - нужно обновить информацию Memo1.Clear; UpdateInfo(Memo1.Lines); end; procedure TForm1.UpdateInfo(Info: TStrings); // Получаем и выводим информацию о батарее в TStrings var st: TSystemPowerStatus; s: string; begin GetSystemPowerStatus(st); // Получить информацию case st.ACLineStatus of // текущее подключение 0: s := 'от батареи'; 1: s := 'от сети'; else s := 'не известно'; end; Info.Add('Питание'#9 + s); case st.BatteryFlag of // Уровень заряда батареи 0: s := 'нормальный'; 1: s := 'высокий'; // >= 66% 2: s := 'низкий'; // <= 33% 4: s := 'критический'; // <=5% 8: s := 'заряжается'; 128: s := 'батарея отсутствует'; else s := 'нет информации'; end; Info.Add('Заряд батарей'#9 + s); Info.Add('Уровень заряда'#9 + IntToStr(st.BatteryLifePercent) + '%'); // В % if Integer(st.BatteryLifeTime) < 0 then s := 'неизвестно' // В секундах else s := TimeToStr(st.BatteryLifeTime / SecsPerDay); Info.Add('Время работы от батерей'#9 + s); if Integer(st.BatteryFullLifeTime) = -1 then s := 'неизвестно' // Макс. время батареи else s := TimeToStr(st.BatteryFullLifeTime / SecsPerDay); Info.Add('Максимальное время работы'#9 + s); end; end.Примечание. На форме Form1 лежит Memo1. Больше ничего не нужно. |
| След. > |
|---|

