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 с комментариями роли ее полей приводится ниже:
...
TMemoryStatus = record
dwLength: DWORD; //Размер структуры (байт)
dwMemoryLoad: DWORD; //Процент загрузки физической памяти
dwTotalPhys: DWORD; //Полный объем физической памяти
dwAvailPhys: DWORD; //Объем свободной оперативной памяти
dwTotalPageFile: DWORD; //Полный объем файла подкачки
dwAvailPageFile: DWORD; //Объем свободного пространства
//в файле подкачки
dwTotalVirtual: DWORD; //Полный объем виртуальной памяти
dwAvailVirtual: DWORD; //Объем свободной виртуальной памяти
end;
Два последние поля структуры TMemoryStatus относятся к приложению, вызывающему функцию GlobalMemoryStatus. Они рассмотрены чуть ниже. Пример использования функции GlobalMemoryStatus приведен в листинге 7.6.
...
Листинг 7.6.
Определение состояния памяти
procedure TForm1.LoadMemoryInfo();
var
memStat: TMemoryStatus;
begin
memStat.dwLength := SizeOf(memStat);
//Получение информации о загрузке памяти
GlobalMemoryStatus(memStat);
//Заполнение полей формы
//..% использования памяти
pbMemUsage.Position := memStat.dwMemoryLoad;
lblMemUsage.Caption := IntToStr(memStat.dwMemoryLoad) + \'%\
//..использование оперативной памяти
txtMemTotal.Text := IntToStr(memStat.dwTotalPhys div 1024);
txtMemAvail.Text := InttoStr(memStat.dwAvailPhys div 1024);
//..использование файла подкачки
txtPageTotal.Text := IntToStr(memStat.dwTotalPageFile div 1024);
txtPageAvail.Text := InttoStr(memStat.dwAvailPageFile div 1024);
Читать дальше
Конец ознакомительного отрывка
Купить книгу