Главная arrow Windows, WinAPI arrow Получить информацию об аккумуляторе  
10.02.2012
Главное меню
Главная
Лаборатория
Книги по дельфи
Инструменты
Статьи
Видео
Юмор
Ссылки
Поиск
База знаний Delphi
Общие вопросы
Windows, WinAPI
Графика, Звук
IDE Delphi
Консоль
Авторизация





Забыли пароль?
Вы не зарегистрированы. Регистрация
Каталог@Mail.ru - каталог ресурсов интернет
Получить информацию об аккумуляторе Версия для печати
Рейтинг: / 10
ХудшаяЛучшая 
Написал 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. Больше ничего не нужно.
Добавить новыйПоиск
Anvarbek - Otlichno   2010-10-09 11:50:28
Sposibo vam. Kod oplichno rabotaet.
Юрий   2012-01-31 15:10:50
Спасибо,это все очень удобно для большинства стандартных задач, а не подскажите как добраться до таких параметров как напряжение сила тока?
Snowy   2012-01-31 18:11:30
Подробную информацию можно получить через WMI.
http://www.delphilab.ru/content/view/303/72/
комментарии
Имя:
Заголовок:
UBB-Код:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Security Image
Пожалуйста, введите проверочный код, который Вы видите на картинке.
 
След. >