![]() |
OS Version Windows 10 ermitteln.
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:
Hat jemand eine Idee, wie man das eleganter "sicherer" darstellen kann? Für Eure Hilfe wäre ich dankbar.
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; Gruß Gerd |
AW: OS Version Windows 10 ermitteln.
Es kann dir passieren, dass in Zukunft auch das nicht mehr funktioniert. Der Grund ist, dass Microsoft die Praxis ausmerzen möchte, dass auf die Windowsversion statt auf das benötigte Feature geprüft wird.
(Dass das sinnvoll ist, sehe ich im Übrigen genauso nachdem in der Vergangenheit oft Software nicht mehr funktioniert hat, weil nur die Windowsversion geprüft wurde...) Das Auslesen der Windowsversion sollte aber auch klappen, wenn du per Manifest erklärst, dass deine Software Windowsversion 10 unterstützt. Denn Windows liefert nur bei neueren Windowsversionen als die unterstützte eine falsche Version zurück. Wenn deine Software die Version unterstützt, müsstest du auch die richtige bekommen. Getestet habe ich das allerdings nicht, weil ich sauber auf die Features teste, die ich benötige... |
AW: OS Version Windows 10 ermitteln.
Hallo,
das ganze Plattform-Gedöns und die Winapi sind wertlos, wenn MS mit einer der nächsten Windows-Versionen wieder was Neues erfindet. Meine alten Programme die noch darauf setzen laufen z.B. bis heute munter weiter. Das ist gelinde gesagt Bockmi... Da kann ich den Versions-Check gleich weglassen, oder als Alternative - weil die Infos in der Registry wohl so schnell nicht aussterben werden - die Info's gleich aus der Registry ziehen, und somit auch kompatibel zu jeder neuen Windows-Version sein. @Gerd01 Darum würde ich einfach aus der Registry "ProductName" und "CurrentBuild" auswerten, und sonst nichts. Ich werde es jedenfalls meinen alten Code in Kürze in die Tonne treten und es so machen. Wir könnten ja hier mal eine Aktion starten, was bei "ProductName" so alles drin steht. |
AW: OS Version Windows 10 ermitteln.
Die Lösung Major/Minor-Version geht immer noch. Du musst nur die verwendete Manifestdatei akualisieren und um einen kompatiblitätseintag für Win10 ergänzen. Ansonst läuft deine App im Win8 Kompatiblitätsmodus
|
AW: OS Version Windows 10 ermitteln.
Zitat:
Lg, jus |
AW: OS Version Windows 10 ermitteln.
Ein Beispiel:
Wenn ich die API Funktion GetServiceTimes verwende, benötigt man für das Programm mindestens XP mit SP3. Statt deshalb eine Prüfung einzubauen, ob es sich mindestens um XP mit SP3 handelt, prüfe ich einfach ob die benötigte Funktion da ist. Ist sie es nicht, fehlt sie mir, ergo zeige ich einen Fehler an, dass das System nicht unterstützt wird. Das hat dann den Vorteil, dass es unter allen WindowsVersionen klappt, und zwar auch dann, wenn die Funktion später einmal entfernt würde... Wenn man auf die Windowsversion prüft, bekommt man das nicht mit. Auf diese Weise kann man auch, wenn möglich, nur bestimmte Module der Anwendung deaktivieren, wenn nur Teile der Anwendung das Feature brauchen. |
AW: OS Version Windows 10 ermitteln.
Zitat:
Du hast das ursächliche Problem auf das ich hinaus wollte nicht verstanden. Ich kann doch auf einer z.B. 5 Jahre alten und beim Kunden installierten Software nicht im Nachhinein das Manifest aktualisieren, nur um festzustellen, ob meine SW das laufende OS unterstützt. Das geht praktisch gar nicht. Demzufolge funktioniert die Versionsprüfung bei diesen Programmen nicht mehr, d.h. Win 8.1 wird nicht erkannt, denn ab dwMajorVersion = 6 und dwMinorVersion = 2 gibt's über GetVersionEx() keine aktuelle Build-Nummer mehr. Eine Windows-Versions-Prüfung macht aber - aus meiner Sicht und für meine Zwecke - nur Sinn, wenn sie jetzt schon auch mit zukünftigen, also heute noch gar nicht auf dem Markt befindlichen Windows-Versionen klar kommt. Denn, wer weiß, was sich MS mit Win 11 wieder neu einfallen lässt? Und da ist der gemeinsame Nenner die Registry. Und wenn dann in ein paar Jahren meine jetzt aktuelle, zu dem Zeitpunkt aber schon wieder "veraltete" SW "ProductName=Windows 11" nicht kennt, dann ist das genau das, was ich brauche und erreichen will. |
AW: OS Version Windows 10 ermitteln.
@mm1256
Dann weißt du aber nur, auf welchem OS deine Anwendung läuft, was dir wobei hilft? :gruebel: |
AW: OS Version Windows 10 ermitteln.
Zitat:
Zitat:
oder einfach in der Exe per Ressourcenhacker das Manifest ergänzen. Zitat:
Zitat:
Zitat:
|
AW: OS Version Windows 10 ermitteln.
Zitat:
Ich gehe bei MS davon aus das nur neue Funktionen dazukommen und abgekündigte Funktionen noch einige Zeit existieren. Seit dem wir nicht mehr Win9x existieren sind gefühlt 90% der Versionsprüfungen aus dem Quellcode rausgeflogen. Bei Apple würde m.E. diese Prüfung auch nichts bringen da dann die Anwendung vermutlich gar nicht zugelassen würde. Da muss dann der Code ganz raus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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