Советы по Delphi

       

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


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

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

TypeTGetVer = recordWinVer,WinRev,DosRev,DosVer: Byte;end;
constVerStr = '%d.%d';
procedure TForm1.Button1Click(Sender: TObject);varAllVersions: TGetVer;beginAllVersions := 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.

Дополнение

пишет:

В 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 begincase dwPlatformId ofVER_PLATFORM_WIN32s: Platform := '32s';VER_PLATFORM_WIN32_WINDOWS:begindwBuildNumber := 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]



Содержание раздела