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

 

 

Code:

Type TOSVersion=(osUnknown, osUnknown9x, osUnknownNT, osWin95, osWin98, osWin98SE, osWinME, osWinNT, osWin2000, osXP);

{©Drkb v.3, ®Vit (Vitaly Nevzorov) - Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.}

 

function GetOSVersion : TOSVersion;

var osVerInfo : TOSVersionInfo;

majorVer, minorVer : Integer;

begin

result := OsUnknown;

osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);

if GetVersionEx(osVerInfo) then

begin

majorVer := osVerInfo.dwMajorVersion;

minorVer := osVerInfo.dwMinorVersion;

case osVerInfo.dwPlatformId of

VER_PLATFORM_WIN32_NT :

Case majorVer of

4:result := OsWinNT;

5:if minorVer=0 then result := OsWin2000

else

if minorVer=1 then result := OsXP else result := osUnknownNT;

else result := osUnknownNT;

end; {Case majorVer of}

VER_PLATFORM_WIN32_WINDOWS :

case majorVer of

4: Case minorVer of

0:result := OsWin95;

10: if osVerInfo.szCSDVersion[1] = 'A' then result := OsWin98SE else result := OsWin98;

90: result := OsWinME;

else result := osUnknown9x;

end;{Case minorVer of}

else result := osUnknown9x;

end{case majorVer of}

else result := OsUnknown;

end;{case osVerInfo.dwPlatformId of}

end;{if GetVersionEx(osVerInfo) then}

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

case GetOSVersion of

osUnknown: Showmessage('Unknown');

osWin95: Showmessage('Win95');

osWin98: Showmessage('Win98');

osWin98SE: Showmessage('Win98SE');

osWinME: Showmessage('WinME');

osWinNT: Showmessage('WinNT');

osWin2000: Showmessage('Win2000');

osXP: Showmessage('XP');

end;

end;

 

 

Code:

procedure TForm1.WinVer;

var WinV: Word;

begin

WinV := GetVersion AND $0000FFFF;

Edit6.Text := IntToStr(Lo(WinV))+'.'+IntToStr(Hi(WinV));

end;

 

Функция выдает следующее - 4.10

Как можно таким же простым способом получить полную версию - 4.10.222

 Автор ответа: inko 


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

 

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}

 


 

Пример вызова

Code:

Label1.Caption := WhatWindowsIsInstalled+' (Build '+GetWindowsVersion1+')';        

 

 Автор: Pegas


Этот пример должен работать на всех версиях Windows

 

Code:

{$IFDEF WIN32}

 

function GetVersionEx(lpOs: pointer): BOOL; stdcall;

external 'kernel32' name 'GetVersionExA';

{$ENDIF}

 

procedure GetWindowsVersion(var Major: integer;

var Minor: integer);

var

{$IFDEF WIN32}

lpOS, lpOS2: POsVersionInfo;

{$ELSE}

l: longint;

{$ENDIF}

begin

{$IFDEF WIN32}

GetMem(lpOS, SizeOf(TOsVersionInfo));

lpOs^.dwOSVersionInfoSize := SizeOf(TOsVersionInfo);

while getVersionEx(lpOS) = false do begin

   GetMem(lpos2, lpos^.dwOSVersionInfoSize + 1);

   lpOs2^.dwOSVersionInfoSize := lpOs^.dwOSVersionInfoSize + 1;

   FreeMem(lpOs, lpOs^.dwOSVersionInfoSize);

   lpOS := lpOs2;

end;

Major := lpOs^.dwMajorVersion;

Minor := lpOs^.dwMinorVersion;

FreeMem(lpOs, lpOs^.dwOSVersionInfoSize);

{$ELSE}

l := GetVersion;

Major := LoByte(LoWord(l));

Minor := HiByte(LoWord(l));

{$ENDIF}

end;

 

procedure TForm1.Button1Click(Sender: TObject);

var

Major: integer;

Minor: integer;

begin

GetWindowsVersion(Major, Minor);

Memo1.Lines.Add(IntToStr(Major));

Memo1.Lines.Add(IntToStr(Minor));

end;

 

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

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

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

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


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