Идёт загрузка страницы...

htp://aptem.net.ru





Определение версии DOS и Windows

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

Функция API GetVersion делает это, но вся информация "кодируется" в longint. Вот как получить и декодировать информацию6:


   
Type
TGetVer = record
WinVer,
WinRev,
DosRev,
DosVer: Byte;
end;

const
VerStr = '%d.%d';

procedure TForm1.Button1Click(Sender: TObject);
var
AllVersions: TGetVer;
begin
AllVersions := TGetVer(GetVersion);
Edit1.Text := Format(VerStr, [AllVersions.WinVer, AllVersions.WinRev]);
Edit2.Text := Format(VerStr, [AllVersions.DOSVer, AllVersions.DOSRev]);
end;

Примечание1: Значения, показываемые в информационном диалоге "О системе", не всегда совпадают со значениями, возвращаемыми описанной API функцией, например, Windows for workgroup (Windows для рабочих груп) возвращается как 3.10, а не как 3.11.

Примечание2: Приложения Win32 вместо функции GetVersion должны использовать фунцию GetVersionEx.

Дополнение

Vasili Pincuk пишет:

В VCLUtils.pas есть прекрасная функция GetWindowsVersion зачем изобретать велосипед ? К тому же пример хорошего стиля программирования. Если уж лень искать в исходниках, то ниже её текст. У меня версия от D3 (без Windows 2000 был бы рад - если кто поделится)


    function GetWindowsVersion: string;
{$IFDEF WIN32}
const
sWindowsVersion = 'Windows %s %d.%.2d.%.3d %s';
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, [Platform, dwMajorVersion,
dwMinorVersion, dwBuildNumber, szCSDVersion]));
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}

[000472]