Листинг 7.5.
Определение состояния системы питания
procedure TForm1.LoadPowerStatus();
var
batFlags: String;
status: TSystemPowerStatus;
prof_info: THWProfileInfo;
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;
В листинге 7.5 для отображения каждого параметра системы питания вызывается процедура AddParam, добавляющая в элемент управления формы название параметра и его значение. Этим элементом управления может быть, например, ListView. Для такого случая возможный результат работы процедуры LoadPowerStatus показан на рис. 7.2.
Рис. 7.2. Собранная информация о системе питания
В нашем случае можно заключить, что программа испытывалась на компьютере, хоть и снабженном аккумулятором, но с явно недоделанной системой питания.
И последние несколько слов о том, когда рассмотренный пример может реально пригодиться. А пригодится он в случае, если ваше приложение оперирует большим объемом важных данных, на сохранение которых требуется длительное время и потеря которых может принести большие неприятности. Тогда при обнаружении разрядки батареи приложение может сохранить (а точнее, длительное время сохранять) данные на диск до лучших времен, например, до тех пор, пока питание вновь не будет включено, а заряд батареи не достигнет требуемого значения.
Состояние памяти компьютера
Получение снимка текущего состояния памяти компьютера также является несложной задачей. Недаром эту информацию многие приложения, тот же Блокнот, выводят в окне О программе: заполнить форму чем-то надо, а сведения об объеме памяти кажутся довольно актуальными.
Итак, получить состояние памяти компьютера можно при помощи API-функции GlobalMemoryStatus. Данная функция принимает в качестве параметра структуру TMemoryStatus, заполняет ее поля значениями и в случае успеха возвращает отличное от нуля число. Объявление структуры TMemoryStatus с комментариями роли ее полей приводится ниже: