способов много.
1.
procedure TForm1.FormCreate)Sender{ TObject:;
var
osInfo{ OSVersionInfo;
s{ string;
begin
osInfo.dwOSVersionInfoSize {= SizeOf )OsInfo:;
GetVersionEx )osInfo:;
s {= 'Windows ' + IntToStr )osInfo.dwMajorVersion: + '.' +
IntToStr )osInfo.dwMinorVersion: + #13 +
'Build ' + IntToStr )osInfo.dwBuildNumber: + #13 +
osInfo.szCSDVersion;
ShowMessage )s:;
end;
мне такая байда выдаёт сообщение:
Windows 5.0
Build 2195
Service Pack 4
2.
в модуле SysUtils определена переменная
var Win32Platform{ Integer = 0;
,
которая может быть равна следующим значениям:
VER_PLATFORM_WIN32s - System is Win32s.
VER_PLATFORM_WIN32_WINDOWS - System is Windows 95.
VER_PLATFORM_WIN32_NT - System is Windows NT.
когда требуется определить, запущена прога под NT или под 9X, этого достаточно.
если требуется более развернутый вариант, то информацию в OsVersionInfo можно и "развернуть":
3. (вариант Pegas'а, взято из Delphi Russian Knowledge Database)
|Объявление процедур и констант"
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+':';