AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetVersionEx unter Windows 10

Ein Thema von greenmile · begonnen am 18. Dez 2014 · letzter Beitrag vom 21. Dez 2014
Antwort Antwort
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

AW: GetVersionEx unter Windows 10

  Alt 21. Dez 2014, 10:20
Und wie bereits erwähnt, kann man die Zukunft nicht planen, also kann man mit Sicherheit nur auf alte Versionen reagieren....
Die Formulierung "die Zukunft zu planen" gefällt mir

Mein Versuch das zu tun sieht so aus:

Delphi-Quellcode:

function WindowsBuildFromRegistry: Boolean;
var
  s: string;
begin
  Result := false;
  with TRegistry.Create(KEY_EXECUTE) do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    if OpenKeyReadOnly(rsRegWinVerInfoKey) then
    try
      OSInfo.dwBuildNumber := Cardinal(StrToIntDef(ReadString('CurrentBuildNumber'),0));
      Result := true;
    except
    end;
    CloseKey;
  finally
    Free;
  end;
end;

function GetWinVersion: TWinVersion;
begin
  Result := WinUnknown;
  case OSInfo.dwPlatformId of
    VER_PLATFORM_WIN32s : Result := Win32s;
    VER_PLATFORM_WIN32_WINDOWS : begin
      if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 0)
      then Result := Win95;
      if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 10)
      then Result := Win98;
      if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 90)
      then Result := WinME;
    end;{-VER_PLATFORM_WIN32_WINDOWS-}
    VER_PLATFORM_WIN32_NT: begin
      if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 0)
      then Result := WinNT;
      if (OSInfo.dwMajorVersion = 5) and (OSInfo.dwMinorVersion = 0)
      then Result := Win2000;
      if (OSInfo.dwMajorVersion = 5) and (OSInfo.dwMinorVersion = 1)
      then Result := WinXP;
      if (OSInfo.dwMajorVersion = 5) and (OSInfo.dwMinorVersion = 2) then
      begin
        if GetSystemMetrics(SM_SERVERR2) <> 0
        then Result := Win2003R2 else
        if (OSInfo.wProductType = VER_NT_WORKSTATION)
        then Result := WinXP64 else
        if OSInfo.wSuiteMask = VER_SUITE_WH_SERVER
        then Result := WinHomeSrv
        else Result := Win2003;
      end;
      if (OSInfo.dwMajorVersion = 6) and (OSInfo.dwMinorVersion = 0) then
      begin
        if (OSInfo.wProductType = VER_NT_WORKSTATION)
        then Result := WinVista
        else Result := Win2008;
      end;
      if (OSInfo.dwMajorVersion = 6) and (OSInfo.dwMinorVersion = 1) then
      begin
        if (OSInfo.wProductType = VER_NT_WORKSTATION)
        then Result := Win7
        else Result := Win2008R2;
      end;
      if (OSInfo.dwMajorVersion = 6) and (OSInfo.dwMinorVersion = 2) then
      begin
        if WindowsBuildFromRegistry then begin
          case OSInfo.dwBuildNumber of
            9200 : case OSInfo.wProductType of
                     VER_NT_WORKSTATION : Result := Win8;
                     VER_NT_DOMAIN_CONTROLLER : Result := Win2012;
                     VER_NT_SERVER : Result := Win2012;
                   end;
            9600 : case OSInfo.wProductType of
                     VER_NT_WORKSTATION : Result := Win81;
                     VER_NT_DOMAIN_CONTROLLER : Result := Win2012R2;
                     VER_NT_SERVER : Result := Win2012R2;
                   end;
            9841..9880 : Result := Windows10; // Die Preview ist aktuell bei Build 9879
          end;
        end;
      end;
    end;{-VER_PLATFORM_WIN32_NT-}
  end;
end;
Wobei die Manifeste natürlich mit jeder neuen Win-Version angepasst werden.

[edit]Die Windows-Version-Prüfung habe ich natürlich in eine DLL ausgelagert, d.h. wenn z.B. in Kürze ein neues Buid der 10-er Preview kommt, dann tausche ich einfach die DLL aus und muss nicht gleich die komplette App neu compilieren
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen

Geändert von mm1256 (21. Dez 2014 um 10:24 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz