unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ComCtrls;

type
  TForm1 = class(TForm)
    lvwVerInfo: TListView;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

type
OSVERSIONINFOEX = record
  dwOSVersionInfoSize: DWORD;
  dwMajorVersion: DWORD;
  dwMinorVersion: DWORD;
  dwBuildNumber: DWORD;
  dwPlatformId: DWORD;
  szCSDVersion: array[0..127] of AnsiChar; { Maintenance string for PSS usage }
  //Поля, которых нет в OSVERSIONINFO
  wServicePackMajor: WORD; //Старшая цифра версии ServicePack
  wServicePackMinor: WORD; //Старшая цифра версии ServicePack
  wSuiteMask: WORD;        //Комплектация системы
  wProductType: BYTE;      //Дополнительная информации об ОС
  wReserved: BYTE;
end;

const
//Комплектация ОС
VER_SUITE_BACKOFFICE = 1; //Установлен MS Back Office
VER_SUITE_DATACENTER = 2; //Установлен MS Data Center
VER_SUITE_ENTERPRISE = 4; //Установлена ОС Windows 2000 Advanced Server
VER_SUITE_SMALLBUSINESS = 8; //Установлена MS Small Business Server
VER_SUITE_SMALLBUSINESS_RESTRICTED = 16; //Установлена ограниченная версия 
                          //MS Small Business Server с ограниченной 
VER_SUITE_TERMINAL = 32;  //Установлены терминальные службы 
                          //(терминальный сервер)
VER_SUITE_PERSONAL = 64;  //Персональная версия ОС (типичный набор функций, 
                          //меньше, чем в Professional)


//Дополнительные сведения
VER_NT_WORKSTATION = 1;
VER_NT_DOMAIN_CONTROLLER = 2;
VER_NT_SERVER = 4;

//Измененное объявление функции
function GetVersionEx(var lpVersionInformation: OSVERSIONINFOEX): BOOL;
stdcall; external kernel32 name 'GetVersionExA';

implementation

{$R *.dfm}


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 := 'Версия системы';
  item.SubItems.Insert(0, IntToStr(Integer(info.dwMajorVersion)) + '.' +
                          IntToStr(Integer(info.dwMinorVersion)));
  //..номер сборки
  item := lvwVerInfo.Items.Add();
  item.Caption := 'Сборка';
  item.SubItems.Insert(0, IntToStr(Integer(info.dwBuildNumber)));
  //..платформа
  item := lvwVerInfo.Items.Add();
  item.Caption := 'Платформа';
  case info.dwPlatformId of
    VER_PLATFORM_WIN32s:
      //Эмуляция Win32 или Win16
      item.SubItems.Insert(0, 'Win16');
    VER_PLATFORM_WIN32_WINDOWS:
      //"Классическая" Win32: 95, 98 или ME
      item.SubItems.Insert(0, 'Win32');
    VER_PLATFORM_WIN32_NT:
      //Ядро NT
      item.SubItems.Insert(0, 'WinNT');
  end;
  //..дополнительная информация (например, ServicePack)
  item := lvwVerInfo.Items.Add();
  item.Caption := 'Дополнительные сведения';
  item.SubItems.Insert(0, info.szCSDVersion);
  //..версия ServicePack
  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 := '';
  case info.wProductType of
    VER_NT_WORKSTATION:
      additional := '[Рабочая станция] ';
    VER_NT_DOMAIN_CONTROLLER
      additional := '[Контроллер домена] ';
    VER_NT_SERVER <>
      additional := '[Сервер] ';
  end;
  item := lvwVerInfo.Items.Add();
  item.Caption := 'Дополнительно';
  item.SubItems.Add(additional);
end;

end.
