Windows-Version ermitteln |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
Dieser Artikel zeigt, wie die verwendete Windows-Version ermittelt werden kann. Dafür wird die Systemfunktion GetVersionEx verwendet. Ab Windows 2000 können weitergehende Informationen mit der Struktur OSVERSIONINFOEX abgerufen werden. Für ältere Windows-Versionen wird auf die Struktur OSVERSIONINFO zurückgegriffen.
Als erstes müssen die neue Struktur, verwendete Konstanten und Systemfunktionen bekannt gemacht werden:
type
//http://msdn2.microsoft.com/en-us/library/ms724833.aspx
TOSVersionInfoEx = packed record
dwOSVersionInfoSize : DWORD;
dwMajorVersion : DWORD;
dwMinorVersion : DWORD;
dwBuildNumber : DWORD;
dwPlatformId : DWORD;
szCSDVersion : array[0..127] of Char;
wServicePackMajor : WORD;
wServicePackMinor : WORD;
wSuiteMask : WORD;
wProductType : BYTE;
wReserved : BYTE;
end;
const
VER_SUITE_PERSONAL = $00000200;
VER_NT_WORKSTATION = $00000001;
VER_SUITE_WH_SERVER = $00008000;
SM_SERVERR2 = 89;
function GetOSVersionEx(var lpVersionInformation: TOSVersionInfoEx): BOOL; stdcall; external kernel32 name
'GetVersionExA';
Eine Hilfsfunktion fragt die Systeminformationen ab:
function GetOSVersionInfoEx : TOSVersionInfoEx;
var
OSVersionInfo : TOSVersionInfo absolute Result;
Done : Boolean;
begin
FillChar(Result, SizeOf(Result), #0);
Done := False;
try
Result.dwOSVersionInfoSize := SizeOf(TOSVersionInfoEx);
Done := GetOSVersionEx(Result);
except
end;
if not(Done) then
begin
try
FillChar(Result, SizeOf(Result), #0);
Result.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
Done := GetVersionEx(OSVersionInfo);
except
end;
end;
end;
Folgende Funktion ordnet diese Informationen einem entsprechenden Betriebssystem zu:
function GetWinVersion : string;
var
OSInfo : TOSVersionInfoEx;
begin
Result := 'Unbekannte Windows-Version';
OSInfo := GetOSVersionInfoEx;
case OSInfo.dwPlatformId of
VER_PLATFORM_WIN32s:
begin
Result := 'Win32s';
end;
VER_PLATFORM_WIN32_WINDOWS:
begin
if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 0) then
Result := 'Windows 95';
if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 10) then
Result := 'Windows 98';
if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 90) then
Result := 'Windows Millennium Edition';
end;
VER_PLATFORM_WIN32_NT:
begin
if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 0) then
Result := 'Windows NT';
if (OSInfo.dwMajorVersion = 5) and (OSInfo.dwMinorVersion = 0) then
Result := 'Windows 2000';
if (OSInfo.dwMajorVersion = 5) and (OSInfo.dwMinorVersion = 1) then
Result := 'Windows XP';
if (OSInfo.dwMajorVersion = 5) and (OSInfo.dwMinorVersion = 2) then
begin
if GetSystemMetrics(SM_SERVERR2) <> 0 then
Result := 'Windows Server 2003 "R2"'
else
if (OSInfo.wProductType = VER_NT_WORKSTATION) then
Result := 'Windows XP x64'
else
if OSInfo.wSuiteMask = VER_SUITE_WH_SERVER then
Result := 'Windows Home Server'
else
Result := 'Windows Server 2003';
end;
if (OSInfo.dwMajorVersion = 6) and (OSInfo.dwMinorVersion = 0) then
begin
if (OSInfo.wProductType = VER_NT_WORKSTATION) then
Result := 'Windows Vista'
else
Result := 'Windows Server 2008';
end;
if (OSInfo.dwMajorVersion = 6) and (OSInfo.dwMinorVersion = 1) then
begin
if (OSInfo.wProductType = VER_NT_WORKSTATION) then
Result := 'Windows 7'
else
Result := 'Windows Server 2008 R2';
end;
if (OSInfo.wSuiteMask and VER_SUITE_PERSONAL) = VER_SUITE_PERSONAL then
Result := Result + ' Home Edition'
else
Result := Result + ' Professional';
end;
end;
Result := Trim(Result + ' ' + OSInfo.szCSDVersion);
end;
Eine Dokumentation zu den verwendeten Versionsnummer befindet sich im MSDN. Diese Liste wird mit neuen Windows-Versionen ergänzt. Damit lässt sich die Funktion GetWinVersion leicht erweitern und vervollständigen.
Alternativ können auch die globalen Variablen aus der Unit SysUtils verwendet werden, worüber sich die Produktlinie (Win32Platform - W9X oder NT), die Major (Win32MajorVersion), Minor (Win32MinorVersion), sowie die Buildnummer (Win32BuildNumber) ermitteln lassen. Eine weitere Variable enthält Informationen über evtl. installierte Servicepacks (Win32CSDVersion). Eine ähnliche Funktion befindet sich auch in der JCL in der Unit JCLSysInfo und trägt den Namen GetWindowsVersion bzw. GetWindowsVersionString.
- Historie
- Dateiversion ermitteln
- Alle Versionsinformationen auslesen
- Windows-Verzeichnis ermitteln
- Windows-Schriftgröße herausfinden (Large, Small)
- Windows-PC über das Netzwerk herunterfahren
- Windows NT/2000/XP oder Windows 9x/Me
- Auf das Beenden von Windows reagieren
- Windows-Uptime berechnen
- Windows herunterfahren