Листинг 7.4.
Определение имени пользователя
function UserName(): String;
var
buffer: String;
len: Cardinal;
begin
len := 100; //Увы, но константы UNLEN в модуле Windows найти
//не удалось. Буфера такой длины должно хватить
SetLength(buffer, len);
if GetUserName(PAnsiChar(buffer), len)
<> False then
UserName := Copy(buffer, 1, len)
else
UserName := \'\
end;
Чаще всего приведенная в листинге 7.4 функция определяет пользователя, выполнившего вход в систему. Но если приложение запущено от имени другого пользователя (например, User при вошедшем пользователе Admin), то, соответственно, определяется имя пользователя User.
Состояние системы питания компьютера
Следующий пример является интересным для обладателей компьютеров с резервным источником питания (батарея в ноутбуке или источник бесперебойного питания).
Для определения состояния системы питания компьютера используется API-функция GetSystemPowerStatus. Она заполняет структуру TSystemPowerStatus и в случае успеха возвращает ненулевое значение. Упомянутая структура имеет следующие поля:
TSystemPowerStatus = packed record
ACLineStatus : Byte; //Подключение к сети
//переменного тока
BatteryFlag : Byte; //Состояние батареи
//(уровень заряда и прочее)
BatteryLifePercent : Byte; //Оставшийся ресурс батареи (в %)
Reserved1 : Byte;
BatteryLifeTime : DWORD; //Оставшееся время (в сек.)
//работы батареи
BatteryFullLifeTime : DWORD; //Полное время (в сек.)
//работы батареи
end;
Если значения полей BatteryLifePercent, BatteryLif eTime, BatteryFull-Lif eTime предельно ясны, то извлечение информации из полей ACLineStatus и BatteryFlag можно посмотреть в листинге 7.5.