Damit ein weiterer Ableger der hier verwendeten Version herum schwirrt, auch mal meine angepasste Version:
Delphi-Quellcode:
type
TOperationSystems = (gos_unknown, gos_Win95, gos_Win98, gos_Win98SE, gos_WinME,
gos_WinNT, gos_Win2k, gos_WinXP, gos_Vista, gos_Win7, gos_WinNewer);
function GetOSfriendlyName(OperationSystem : TOperationSystems):String;
var
osVerInfo: TOSVersionInfo;
begin
// GetVersionEx zum ermitteln der Zusatzinformationen
osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(osVerInfo);
case OperationSystem of
gos_Win95 : Result := '95';
gos_Win98 : Result := '98';
gos_Win98SE : Result := '98SE';
gos_WinME : Result := 'ME';
gos_WinNT : Result := 'NT';
gos_Win2k : Result := '2000';
gos_WinXP : Result := 'XP';
gos_Vista : Result := 'VISTA';
gos_Win7 : Result := '7';
gos_WinNewer: Result := '7+';
else
Result := '';
end;
Result := 'Windows '+Result + ' ['+
IntToStr(osVerInfo.dwMajorVersion)+'.'+
IntToStr(osVerInfo.dwMinorVersion)+'.'+
IntToStr(osVerInfo.dwBuildNumber)+'] '+
osVerInfo.szCSDVersion;
end;
function GetOperatingSystem: TOperationSystems;
var
osVerInfo: TOSVersionInfo;
majorVer, minorVer: Integer;
begin
// GetVersionEx zum ermitteln der Versionsnummer
osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
if GetVersionEx(osVerInfo) then begin
// Hilfsvariablen zur leichteren Fallunterscheidung
majorVer := osVerInfo.dwMajorVersion;
minorVer := osVerInfo.dwMinorVersion;
// Nach alter und neuer Kernelbaureihe aufteilen
case osVerInfo.dwPlatformId of
// Windows NT/2000/XP/Vista und neuer
VER_PLATFORM_WIN32_NT: begin
case majorVer of
0..4 : Result := gos_WinNT;
5 : if minorVer = 0 then Result := gos_Win2K
else Result := gos_WinXP;
6 : if minorVer = 0 then Result := gos_Vista
else Result := gos_Win7;
else
Result := gos_WinNewer;
end;
end;
// Windows 95/98/ME
VER_PLATFORM_WIN32_WINDOWS: begin
if majorVer = 4 then begin
case minorVer of
0 : Result := gos_Win95;
10 : if osVerInfo.szCSDVersion[1] = 'A' then Result := gos_Win98SE
else result := gos_Win98;
90 : Result := gos_WinME;
else
Result := gos_Unknown;
end;
// <> Major Version 4
end else Result := gos_Unknown;
end;
// Case osVerInfo.dwPlatformId of
else
Result := gos_Unknown;
end;
// Aufruf von GetVersionEx() fehlgeschlagen
end else Result := gos_Unknown;
end;
procedure TForm.FormCreate(Sender: TObject);
begin
LabelWindows.Caption := GetOSfriendlyName(GetOperatingSystem);
end;
Hab' es jetzt nur mit XP und Win98SE (Virtuell) getestet, sollte aber trotz Umbau der Kernfunktion richtig arbeiten.