EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

Состояние системы питания компьютера

 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для PC (Windows/Linux/DOS)
Состояние системы питания компьютера
Автор Сообщение
onyx
11 1110 1000
11 1110 1000


Зарегистрирован: 02.04.2007
Сообщения: 1061
Откуда: Минск
598 Монеты

СообщениеДобавлено: Вс, 30 Дек, 2007 17:00    Заголовок сообщения: Состояние системы питания компьютера Ответить с цитатой

Для определения состояния системы питания компьютера ипользуется API-функция GetSystemPowerStatus. Она заполняет структуру TSystemPowerStatus и в случае успеха возвращает нулевое значение.
Данная структура имеет следующие поля (вырезка из модуля Windows.pas):
Код:
type
  PSystemPowerStatus = ^TSystemPowerStatus;
  _SYSTEM_POWER_STATUS = packed record
    ACLineStatus : Byte; //Подключение к сети переменного тока
    BatteryFlag : Byte; //Состояние батареи (уровень заряда и прочее)
    BatteryLifePercent : Byte; //Оставшийся ресурс батареи (в %)
    Reserved1 : Byte; //???
    BatteryLifeTime : DWORD; //Оставшееся время работы батареи (в сек.)
    BatteryFullLifeTime : DWORD; //Полное время работы батареи (в сек.)
  end;

Если значени полей BatteryLifePercent, BatteryLifeTime, BatteryFullLifeTime, предельно ясны, то извлечение информации из полей ACLineStatus и BatteryFlag можно вот таким способом:
Код:
procedure TForm1.LoadPowerStatus();
var
  batFlags: String;
  status: TSystemPowerStatus;
begin
  lvwPowerStatus.Clear;
  //Получаем информацию о состоянии питания
  ZeroMemory(Addr(status), SizeOf(status));
  GetSystemPowerStatus(status);
  //Заполняем список информацией о состоянии питания
  //..подключение к сети
  case status.ACLineStatus of
    0: AddParam('Подключение к сети', 'Отключен');
    1: AddParam('Подключение к сети', 'Подключен');
  else AddParam('Подключение к сети', 'Неизвестно');
  end;
  //..заряд батареи (битовая маска)
  if status.BatteryFlag and 1 <> 0 then batFlags := 'Высокий ';
  if status.BatteryFlag and 2 <> 0 then batFlags := batFlags + 'Низкий ';
  if status.BatteryFlag and 4 <> 0 then batFlags := batFlags + 'Критический ';
  if status.BatteryFlag and 8 <> 0 then batFlags := batFlags + '(Идет зарядка)';
  if status.BatteryFlag and 128 <> 0 then batFlags := batFlags + 'Батарея не установлена';
  if status.BatteryFlag = 255 then batFlags := batFlags + 'Неизвестно';
  AddParam('Заряд батареи', batFlags);

  //..численные характеристики батареи
  if status.BatteryLifePercent <> 255 then
    AddParam('Остаток заряда батареи',
             IntToStr(Integer(status.BatteryLifePercent)))
  else
    AddParam('Остаток заряда батареи', 'Неизвестно');

  if status.BatteryLifeTime <> Cardinal(-1) then
    AddParam('Время работы батареи (остаток, сек.)',
             IntToStr(Integer(status.BatteryLifeTime)))
  else
    AddParam('Время работы батареи (остаток, сек.)', 'Неизвестно');

  if status.BatteryFullLifeTime <> Cardinal(-1) then
    AddParam('Полное время работы батареи, сек.',
             IntToStr(Integer(status.BatteryFullLifeTime)))
  else
    AddParam('Полное время работы батареи, сек.', 'Неизвестно');
end;

Здесь для отображения каждого параметра системы питаания вызывается процедура AddParam, добавляющая в элемент управления формы название параметра и его значение. Этим элементом управления может быть например, TListView:
Код:
//Добавляет название и значение параметра в список
procedure TForm1.AddParam( name, value: String );
var
  item: TListItem;
begin
  item := lvwPowerStatus.Items.Add();
  item.Caption := name;
  item.SubItems.Insert(0, value);
end;

Не забываем в раздел { Private declarations } добавить две эти процедуры:
Код:
private
    { Private declarations }
    procedure AddParam( name, value: String );
    procedure LoadPowerStatus();


(с)2007. onyx
_________________
DelphiLand.net - Территория Delphi :: Исходники, компоненты, программы, статьи, журнал, форум.
Последние новости. И многое, многое другое!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для PC (Windows/Linux/DOS) Часовой пояс: GMT
Страница 1 из 1

 


Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group