Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.113.188] |
|
Сообщ.
#1
,
|
|
|
Для определения состояния системы питания компьютера ипользуется 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(); |