Содержание материала

Вот еще один пример. Мне он нравиться больше всего. Я его обычно использую в своих программах. Он гибкий и предоставляет максимум информации.

 

Code:

{Объявление процедур и констант}

{©Drkb v.3}

 

function GetWindowsVersion1: string;

function WhatWindowsIsInstalled : String;

const

VER_NT_WORKSTATION = 0;

VER_NT_DOMAIN_CONTROLLER = 1;

VER_NT_SERVER = 2;

 

VER_SUITE_SMALLBUSINESS = 1;

VER_SUITE_ENTERPRISE = 2;

VER_SUITE_BACKOFFICE = 4;

VER_SUITE_COMMUNICATIONS = 8;

VER_SUITE_TERMINAL = $10;

VER_SUITE_SMALLBUSINESS_RESTRICTED = $20;

VER_SUITE_EMBEDDEDNT = $40;

VER_SUITE_DATACENTER = $80;

VER_SUITE_SINGLEUSERTS = $100;

VER_SUITE_PERSONAL = $200;

VER_SUITE_BLADE = $400;

 

type

TOsVersionInfoExA = packed record

old : TOsVersionInfoA;

wServicePackMajor : Word;

wServicePackMinor : Word;

{

wSuiteMask

Набор битовых флагов, определяющих компоненты Windows

VER_SUITE_BACKOFFICE Установлен компонент Microsoft BackOffice.

VER_SUITE_BLADE Установлен компонент Windows .NET Web Server.

VER_SUITE_DATACENTER Установлена Windows 2000 или компонент Windows .NET

Datacenter Server

VER_SUITE_ENTERPRISE Установлена Windows 2000 Advanced Server или компонент

Windows .NET Enterprise Server.

VER_SUITE_PERSONAL Установлена Windows XP Home Edition.

VER_SUITE_SMALLBUSINESS Установлен Microsoft Small Business Server.

VER_SUITE_SMALLBUSINESS_RESTRICTED Установлен Microsoft Small Business

Server с ограничительной лицензией для клиентов

VER_SUITE_TERMINAL Установлен компонент Terminal Services.

}

 

wSuiteMask : Word;

{wProductType Дополнительная информация о типе операционной системы

VER_NT_WORKSTATION Операционная система Windows NT 4.0 Workstation,

Windows 2000 Professional,

Windows XP Home Edition, или

Windows XP Professional.

VER_NT_DOMAIN_CONTROLLER Операционная система является контроллером домена.

VER_NT_SERVER Операционная система является сервером.

}

 

wProductType : Byte;

wReserved : Byte;

end;

 

...

 

{Реализация}

function WhatWindowsIsInstalled : String;

var VerInfo : TOsVersionInfoExA;

begin

FillChar(VerInfo, sizeof(VerInfo), 0);

VerInfo.old.dwOSVersionInfoSize := Sizeof(TOsVersionInfoExA);

if NOT GetVersionExA(VerInfo.old) then

begin

VerInfo.old.dwOSVersionInfoSize := Sizeof(TOsVersionInfoA);

GetVersionExA(VerInfo.old);

end;

case VerInfo.old.dwPlatformId of

VER_PLATFORM_WIN32_WINDOWS:

if (Verinfo.old.dwMajorVersion = 4) AND

(Verinfo.old.dwBuildNumber = 950) then Result := 'Windows 95' else

if (Verinfo.old.dwMajorVersion = 4) AND

(Verinfo.old.dwMinorVersion = 10) AND

(Verinfo.old.dwBuildNumber = 1998) then Result := 'Windows 98' else

if (Verinfo.old.dwMinorVersion = 90) then Result := 'Windows Me';

VER_PLATFORM_WIN32_NT:

if Verinfo.old.dwMajorVersion = 3 then Result := 'Windows NT 3.51' else

if Verinfo.old.dwMajorVersion = 4 then Result := 'Windows NT 4.0' else

if Verinfo.old.dwMajorVersion = 5 then

if Verinfo.old.dwMinorVersion = 0 then Result := 'Windows 2000' else

if Verinfo.old.dwMinorVersion = 1 then Result := 'Windows XP';

VER_PLATFORM_WIN32s: Result := 'Win32s';

end;

end;

 

 

function GetWindowsVersion1: string;

{$IFDEF WIN32}

const sWindowsVersion = '%.3d';

var

Ver: TOsVersionInfo;

Platform: string[4];

begin

Ver.dwOSVersionInfoSize := SizeOf(Ver);

GetVersionEx(Ver);

with Ver do begin

case dwPlatformId of

VER_PLATFORM_WIN32s: Platform := '32s';

VER_PLATFORM_WIN32_WINDOWS:

begin

dwBuildNumber := dwBuildNumber and $0000FFFF;

if (dwMajorVersion > 4) or ((dwMajorVersion = 4) and (dwMinorVersion >= 10)) then Platform := '98'

else Platform := '95';

end;

VER_PLATFORM_WIN32_NT: Platform := 'NT';

end;

Result := Trim(Format(sWindowsVersion, [dwBuildNumber]));

end;

end;

{$ELSE}

const

sWindowsVersion = 'Windows%s %d.%d';

sNT: array[Boolean] of string[3] = ('', ' NT');

var

Ver: Longint;

begin

Ver := GetVersion;

Result := Format(sWindowsVersion, [sNT[not Boolean(HiByte(LoWord(Ver)))],

LoByte(LoWord(Ver)), HiByte(LoWord(Ver))]);

end;

{$ENDIF WIN32}

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить