Bis Windows 8.1 habe ich das Operating System über Win32Platform und dann über die Win32MajorVersion und Win32MinorVersion ermittelt (Bitte keine Frage Warum man die Windows-Version benötigt). Mit Windows Version 10 geht das so nicht mehr.
Ich habe mir deshab folgende "Krücke" durch das Auslesen der Registry gebaut:
Code:
Type
TWinOSType = ( win_UnknownPlatform,
win32_95, win32_98, win32_ME,
win32_NT, win32_2000, win32_XP,
win_Vista, win_Win7, win_Win8, win_Win10 );
function Windows10FromRegistry: Boolean;
var
s: string;
begin
Result := false;
with TRegistry.Create(KEY_EXECUTE) do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKeyReadOnly('SOFTWARE\Microsoft\Windows NT\CurrentVersion') then
try
if ValueExists('CurrentVersion')
then s := Readstring('CurrentVersion');
if s = '6.3' then
if ValueExists('CurrentBuildNumber')
then s := Readstring('CurrentBuildNumber');
Result := StrToIntDef(s,0) >= 10240;
except
end;
CloseKey;
finally
Free;
end;
end;
function GetWinOSType: TWinOSType;
begin
Result := win_UnknownPlatform;
case Win32Platform of
VER_PLATFORM_WIN32_WINDOWS:// 1=9x-Reihe
If Win32MajorVersion=4 Then
Begin
Case Win32MinorVersion of
0 : result := win32_95;
10: result:= win32_98;
90: result:= win32_ME;
end;
end;
VER_PLATFORM_WIN32_NT: // 2=NT-Reihe
Case Win32MajorVersion of
3:IF Win32MinorVersion=51 then
result:= win32_NT;//'Windows NT 3.51';
4:If Win32MinorVersion=0 then
result:= win32_NT; //'Windows NT 4';
5:Case Win32MinorVersion of
0: result:= win32_2000;
1: result:= win32_xp; //'Windows XP';
2: result:= win32_xp; //'Windows .NET Server';
end;
6:case Win32MinorVersion of
0: result := win_Vista;
1: Result := win_Win7;
// 2: Result := Result := win_Win8;
2:Begin
Result := win_Win8;
if Windows10FromRegistry then
Result := win_Win10;
End;
end;
End;
end;
end;
Hat jemand eine Idee, wie man das eleganter "sicherer" darstellen kann? Für Eure Hilfe wäre ich dankbar.
Gruß Gerd