Листинг 7.2.
Определение версии ОС (NT, 2000, ХР)
procedure TForm1.FormCreate(Sender: TObject);
var
info: OSVERSIONINFOEX;
item: TListItem;
suite, additional: String;
begin
//Получаем информацию о версии ОС
info.dwOSVersionInfoSize := SizeOf(info);
GetVersionEx(info);
//Заполняем список информацией об ОС
//…
//..версия о пакете обновлений
item := lvwVerInfo.Items.Add();
item.Caption := \'Версия ServicePack\
item.SubItems.Insert
(0, IntToStr(Integer(info.wServicePackMajor)) + \'.\' +
IntToStr(Integer(info.wServicePackMinor)));
//..комплекация ОС
suite := \'\
if info.wSuiteMask and VER_SUITE_BACKOFFICE <> 0 then
suite := suite + \'[Установлен Back Office] \
if info.wSuiteMask and VER_SUITE_DATACENTER <> 0 then
suite := suite + \'[Microsoft Data Center] \
if info.wSuiteMask and VER_SUITE_ENTERPRISE <> 0 then
suite := suite + \'[Windows 2000 Advanced Server] \
if info.wSuiteMask and VER_SUITE_SMALLBUSINESS <> 0 then
suite := suite + \'[Small Business Server] \
if info.wSuiteMask and VER_SUITE_SMALLBUSINESS_RESTRICTED <> 0
then
suite := suite + \'[Small Business Server, ограниченная версия] \
if info.wSuiteMask and VER_SUITE_TERMINAL <> 0 then
suite := suite + \'[Terminal Service] \
if info.wSuiteMask and VER_SUITE_PERSONAL <> 0 then
suite := suite + \'[Workstation Personal (не Professional)] \
item := lvwVerInfo.Items.Add();
item.Caption := \'Комплектация\
item.SubItems.Add(suite);
//..дополнительные сведения
additional := \'\
if info.wProductType and VER_NT_WORKSTATION <> 0 then
additional := additional + \'[Рабочая станция] \
if info.wProductType and VER_NT_DOMAIN_CONTROLLER <> 0 then
additional := additional + \'[Контроллер домена] \
if info.wProductType and VER_NT_SERVER <> 0 then
additional := additional + \'[Сервер] \
item := lvwVerInfo.Items.Add();
item.Caption := \'Дополнительно\
item.SubItems.Add(additional);
end;
Имя компьютера
Следующий простой пример (листинг 7.3) показывает, как можно определить сетевое имя компьютера. Функция ComputerName скрывает «прелести» работы со строковым буфером, который нужно передавать в API-функцию GetComputerName.
Листинг 7.3.
Определение сетевого имени компьютера
function ComputerName(): String;
var
buffer: String;
len: Cardinal;
begin
len := MAX_COMPUTERNAME_LENGTH + 1;
SetLength(buffer, len);
if GetComputerName(PAnsiChar(buffer), len) <> False then
ComputerName := Copy(buffer, 1, len)
else
ComputerName := \'\
end;
Имя пользователя
Определить имя пользователя, от имени которого запущена программа (а точнее – вызывающий функцию поток), можно с использованием функции из листинга 7.4.