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

Тема в разделе "Delphi - FAQ", создана пользователем onyx, 30 дек 2007.

Статус темы:
Закрыта.
  1. onyx

    onyx Гость

    Для определения состояния системы питания компьютера ипользуется API-функция GetSystemPowerStatus. Она заполняет структуру TSystemPowerStatus и в случае успеха возвращает нулевое значение.
    Данная структура имеет следующие поля (вырезка из модуля Windows.pas):
    Код (Text):
    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 можно вот таким способом:
    Код (Text):
    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:
    Код (Text):
    //Добавляет название и значение параметра в список
    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 } добавить две эти процедуры:
    Код (Text):
    private
    { Private declarations }
    procedure AddParam( name, value: String );
    procedure LoadPowerStatus();
    (с)2007. onyx
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей