![]() |
Windows Version ermitteln
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo liebe Delphi Community,
wg. meiner Augen bin ich kaum noch aktiv als Delphi Programmierer. Aber einen neues Notebook habe ich mir nach 10 Jahren gekauft, weil Vorlesen und Lupe sehr hilfreich für mich sind. Meine alten Programme laufen auch unter Windows 11 gut. Eines fällt mir auf: ich zeige in der About-Box die Windows Version an und es lässt sich Win 11 nicht von Win 10 unterscheiden. Ich hatte ein kleines Testprogramm gebastelt. Siehe Screenshot. Ich habe gegooglelt und 2 Beiträge (StackOverflow, Ct) gefunden. Beide sagen, an der Build-Nummer lässt es sich unterscheiden. Build >= 22000 Windows 11. Stimmt das verbindlich? Ich habe nur 2 Systeme und kann es nur begrenzt ausprobieren. Wie erkennt W11 denn sich selbst? Winver zeigt es korrekt an. Microsoft hat wohl kein großes Interesse an Windows 11, sonst würden sie W11 eine neue Versionsnummer gönnen. Gruß Willie. Der Screenshot zeigt W10 aber bei W11 ist nur die Build-Nummer anders. |
AW: Windows Version ermitteln
Hallo,
mit WMI funktioniert es.
Delphi-Quellcode:
aufruf
procedure GetCIM_OperatingSystemInfo;
const WbemUser = ''; WbemPassword = ''; WbemComputer = 'localhost'; wbemFlagForwardOnly = $00000020; var FSWbemLocator, FWMIService, FWbemObjectSet, FWbemObject: OLEVariant; oEnum: IEnumvariant; iValue: LongWord; begin; FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator'); FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword); FWbemObjectSet := FWMIService.ExecQuery('SELECT * FROM CIM_OperatingSystem', 'WQL', wbemFlagForwardOnly); oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant; while oEnum.Next(1, FWbemObject, iValue) = 0 do begin memo1.Lines.add(FWbemObject.Caption); //<<------ müsste entsprechend angepasst werden. FWbemObject:=Unassigned; end; end;
Delphi-Quellcode:
ich habe es hiermit erstellt.begin try memo1.Lines.clear; coInitialize(nil); try GetCIM_OperatingSystemInfo; finally CoUninitialize; end; except on E:EOleException do showmessage(Format('EOleException %s %x', [E.Message,E.ErrorCode])); on E:Exception do ShowMessage(E.Classname+' : '+ E.Message); end; end; ![]() Gruß |
AW: Windows Version ermitteln
Man erkennt Windows 11 auch an der Build-Nummer. Sie ist größer oder gleich 22000.
|
AW: Windows Version ermitteln
Zitat:
|
AW: Windows Version ermitteln
![]() Aber wie es oft genug gesagt wird: Es wird nicht auf Versionen geprüft, sondern auf das Feature, welches benötigt wird. Genauso, wie man nicht auf "Admin" prüft, sondern auf das Recht, welches nötig ist. |
AW: Windows Version ermitteln
Zitat:
Jeder, der sich mit den MS Produkten auskennt, weiß, dass er auf beides prüfen muss. Feature in Windows X muss nicht die gleichen Funktionen wie das gleiche Feature in Windows Y haben. |
AW: Windows Version ermitteln
Zitat:
In welchen Fällen brauchtest du denn die Unterscheidung? Zitat:
|
AW: Windows Version ermitteln
Das Auslesen über die API hängt auch noch von der Virtualisierung ab.
Wird das Programm für Windows XP virtualisiert, dann sagt die API auch, es sei ein XP. Da man dann auch die Features von XP bekommt, wäre bei einer Prüfung auf die Version dann XP auch vollkommen richtig, und sich irgendwie auf wirren Wegen die "echte" Version zu besorgen bringt dann ja nicht viel, wenn dann das gewünschte Feature dort nicht erreichbar ist. |
AW: Windows Version ermitteln
Hi,
mein alter Kindergartenfreund schwört auf Windows 7 und das soll die älteste Version sein, die meine Programme unterstützen. Ihr hattet mir schon vor Jahren abgeraten, Abfragen wie
Delphi-Quellcode:
zu benutzen. Ich frage überhaupt nichts ab. Das macht schon das Installationsprogramm InnoSetup. Ich will nur eine korrekte Anzeige der Windows Version in der About-Box. Siegt sonst doof aus. Die Größe des Arbeitsspeichers, die ich auch anzeige ist zum Glück seid Delphi 6 bis heute (Windows 98-Win 11) richtig geblieben.
if IsWin7 then
Willie. |
AW: Windows Version ermitteln
Du bekommst eigentlich alle Infos aus System.SysUtils.TOSVersion:
Code:
uses Syste.SysUtils; sTest := 'Betriebssystem: ' + TOSVersion.Name; sTest := 'Build: ' + TOSVersion.Build.ToString; etc. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 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