onyx $a ||= 5;


Зарегистрирован: 02.04.2007 Сообщения: 1033 Откуда: Беларусь 430 
|
Добавлено: Вс, 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 :: Исходники, компоненты, программы, статьи, журнал, форум.
Последние новости. И многое, многое другое! |
|