Delphi - база знаний


Как получить версию Windows?


Как получить версию Windows?



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


{Объявление процедур и констант}
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}

Пример вызова
Label1.Caption := WhatWindowsIsInstalled+' (Build '+GetWindowsVersion1+')';   

Автор Pegas
Взято с Vingrad.ru






Начало  Назад  Вперед