Einzelnen Beitrag anzeigen

Gerd01

Registriert seit: 18. Mär 2005
Ort: NRW
117 Beiträge
 
Delphi XE2 Professional
 
#1

OS Version Windows 10 ermitteln.

  Alt 7. Aug 2015, 15:40
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
  Mit Zitat antworten Zitat