На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: jack128, Rouse_, Krid
  
    > Состояние системы питания компьютера
      Для определения состояния системы питания компьютера ипользуется API-функция GetSystemPowerStatus. Она заполняет структуру TSystemPowerStatus и в случае успеха возвращает нулевое значение.
      Данная структура имеет следующие поля (вырезка из модуля Windows.pas):
      ExpandedWrap disabled
        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 можно вот таким способом:

      ExpandedWrap disabled
        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:
      ExpandedWrap disabled
        //Добавляет название и значение параметра в список
        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 } добавить две эти процедуры:
      ExpandedWrap disabled
        private
            { Private declarations }
            procedure AddParam( name, value: String );
            procedure LoadPowerStatus();
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0225 ]   [ 16 queries used ]   [ Generated: 28.03.24, 22:56 GMT ]