AGB  ·  Datenschutz  ·  Impressum  







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

Windows Version ermitteln

Ein Thema von Willie1 · begonnen am 23. Mai 2024 · letzter Beitrag vom 31. Mai 2024
Antwort Antwort
Seite 1 von 3  1 23      
Willie1

Registriert seit: 28. Mai 2008
638 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Windows Version ermitteln

  Alt 23. Mai 2024, 17:33
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.
Miniaturansicht angehängter Grafiken
screenshot-2024-05-23-18.15.18.jpg  
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.

Geändert von Willie1 (23. Mai 2024 um 17:57 Uhr) Grund: Noch 'ne Frage
  Mit Zitat antworten Zitat
mmw

Registriert seit: 10. Sep 2019
Ort: OWL
329 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Windows Version ermitteln

  Alt 23. Mai 2024, 18:17
Hallo,
mit WMI funktioniert es.

Delphi-Quellcode:
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;
aufruf

Delphi-Quellcode:

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;
ich habe es hiermit erstellt.

https://github.com/RRUZ/wmi-delphi-code-creator

Gruß
  Mit Zitat antworten Zitat
kopernikus

Registriert seit: 8. Feb 2008
18 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: Windows Version ermitteln

  Alt 23. Mai 2024, 18:56
Man erkennt Windows 11 auch an der Build-Nummer. Sie ist größer oder gleich 22000.
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
638 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: Windows Version ermitteln

  Alt 24. Mai 2024, 17:31
Hallo,
mit WMI funktioniert es.
Ja, das stimmt! Vielen Dank. Nur wenn ich mir den Quelltext ansehe, frage ich mich, muss es so kompliziert sein? Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.329 Beiträge
 
Delphi 12 Athens
 
#5

AW: Windows Version ermitteln

  Alt 24. Mai 2024, 17:42
Delphi-Referenz durchsuchenTOSVersion

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Windows Version ermitteln

  Alt 24. Mai 2024, 18:25
Es wird nicht auf Versionen geprüft, sondern auf das Feature
Das ist natürlich Unsinn.

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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.405 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Windows Version ermitteln

  Alt 24. Mai 2024, 21:47
Es wird nicht auf Versionen geprüft, sondern auf das Feature
Das ist natürlich Unsinn.

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.
Den Fall hatte ich bisher tatsächlich extrem selten. Bisher konnte ich fast immer auf das Feature testen, und in den anderen Fällen wäre das mit etwas mehr Aufwand vermutlich auch gegangen, da ging es z.B. um das Touchhandling.

In welchen Fällen brauchtest du denn die Unterscheidung?

Microsoft hat wohl kein großes Interesse an Windows 11, sonst würden sie W11 eine neue Versionsnummer gönnen.
Tatsächlich hat Microsoft die echte Windowsversion aktiv vor Programmen verborgen, weil viele Entwickler auf die geniale Idee gekommen waren, auf bestimmte Versionen zu prüfen. Deshalb funktionierten plötzlich Programme mit einer neuen Version von Windows nicht mehr, obwohl es technisch gar kein Problem gegeben hätte. Das ist auch einer der Gründe, weshalb es keine größeren Sprünge mehr gab.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!

Geändert von jaenicke (24. Mai 2024 um 21:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.329 Beiträge
 
Delphi 12 Athens
 
#8

AW: Windows Version ermitteln

  Alt 24. Mai 2024, 22:38
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (24. Mai 2024 um 22:43 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
638 Beiträge
 
Delphi 10.1 Berlin Starter
 
#9

AW: Windows Version ermitteln

  Alt 26. Mai 2024, 17:05
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 if IsWin7 then 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.

Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
DaCoda

Registriert seit: 21. Jul 2006
Ort: Hamburg
103 Beiträge
 
Delphi 12 Athens
 
#10

AW: Windows Version ermitteln

  Alt 26. Mai 2024, 17:21
Du bekommst eigentlich alle Infos aus System.SysUtils.TOSVersion:

Code:

uses
  Syste.SysUtils;

  sTest := 'Betriebssystem: ' + TOSVersion.Name;
  sTest := 'Build: ' + TOSVersion.Build.ToString;

  etc.
Debuggers don’t remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      

 

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 18:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz