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 3 von 3     123   
Willie1

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

AW: Windows Version ermitteln

  Alt 27. Mai 2024, 17:58
Hallo Wille,
hol dir die Info's doch direct aus der Registry:
Sieh dir meinen Screenshot an, Methode 3 benutzt die Registry, es steht Windows 10 da! Ich will nur die installierte Windows Version ermitteln.

Mit WMI klappt das offensichtlich auch bei Windows 11. Bei https://www.der-windows-papst.de/wp-...-einsetzen.pdf steht, dass man auch mit WMI die Build Nummer ermitteln kann. Ich habe WMI nicht gelernt, kann einer von euch das verstehen?
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
mmw

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

AW: Windows Version ermitteln

  Alt 27. Mai 2024, 18:42
Hallo,

das geht auch.
Delphi-Quellcode:
procedure GetWin32_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 Win32_OperatingSystem', 'WQL', wbemFlagForwardOnly);
  oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
  while oEnum.Next(1, FWbemObject, iValue) = 0 do
   begin
    memo1.Lines.add(Format('BootDevice %s',[String(FWbemObject.BootDevice)]));
    Memo1.Lines.add(Format('BuildNumber %s',[String(FWbemObject.BuildNumber)]));// String
    Memo1.Lines.Add(Format('Caption %s',[String(FWbemObject.Caption)]));// String
    FWbemObject:=Unassigned;
   end;
end;


begin
 try
  memo1.Lines.Clear;
  CoInitialize(nil);
   try
    GetWin32_OperatingSystemInfo;
   finally
    CoUninitialize;
   end;
 except
    on E:EOleException do
        Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
    on E:Exception do
        Writeln(E.Classname, ':', E.Message);
 end;
 end;
komplette Beschreibung hier -
https://learn.microsoft.com/de-de/wi...peratingsystem

habe ich mit dem glreichen Programm erstellt siehe #2. Der Code Schnipsel muss wieder angepasst werden.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: Windows Version ermitteln

  Alt 27. Mai 2024, 18:49
So mache ich es, es liest Major, Minor, Build und Revisionsnummber von Windows aus.
Kompatibel mit Turbo Delphi 2006, FreePascal, RADStudio etc...
Es erscheint nicht "Das ist Windows 11" sondern was auch immer Windows selbst für sich hinterlegt hat als numerischer Wert.
Delphi-Quellcode:
program winverex;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils;

type
  TWindowsVersion = packed record
    Major,
    Minor,
    Build,
    Revision: DWORD;
  end;

function GetWindowsVersion: TWindowsVersion;
type
  TVSFixedFileInfo = record
    dwSignature,
    dwStrucVersion,
    dwFileVersionMS,
    dwFileVersionLS,
    dwProductVersionMS,
    dwProductVersionLS,
    dwFileFlagsMask,
    dwFileFlags,
    dwFileOS,
    dwFileType,
    dwFileSubtype,
    dwFileDateMS,
    dwFileDateLS: DWORD;
  end;
  PVSFixedFileInfo = ^TVSFixedFileInfo;
  TRtlGetNtVersionNumbers = procedure(out MajorVersion, MinorVersion, BuildNumber: DWORD); stdcall;
var
  RtlGetNtVersionNumbers: TRtlGetNtVersionNumbers;
  hLib: HINST;
  dwHandle: DWORD;
  pBuffer: Pointer;
  pVersionInfo: PVSFIXEDFILEINFO;
  dwLen: DWORD;
  WindowsDir: array[0..Pred(MAX_PATH)] of AnsiChar;
  WideWindowsDir: WideString;
  GotRtlVer: Boolean;
begin
  dwHandle := 0;
  pVersionInfo := nil;
  GotRtlVer := False;
  GetWindowsDirectory(WindowsDir, MAX_PATH);
  StrCat(WindowsDir, '\System32\Ntdll.dll');
  SetString(WideWindowsDir, PAnsiChar(@WindowsDir[0]), Length(WindowsDir));
  hLib := LoadLibraryW(PWideChar(WideWindowsDir));
  if hLib <> 0 then
    begin
      RtlGetNtVersionNumbers := TRtlGetNtVersionNumbers(GetProcAddress(hLib, 'RtlGetNtVersionNumbers'));
      if Assigned(RtlGetNtVersionNumbers) then
        begin
          RtlGetNtVersionNumbers(Result.Major, Result.Minor, Result.Build);
          GotRtlVer := True;
        end;
      FreeLibrary(hLib);
    end;
  Result.Revision := 0;
  dwLen := GetFileVersionInfoSizeW(PWideChar(WideWindowsDir), dwHandle);
  if dwLen > 0 then
    begin
      pBuffer := AllocMem(dwLen);
      try
        if GetFileVersionInfoW(PWideChar(WideWindowsDir), dwHandle, dwLen, pBuffer) then
          begin
            if VerQueryValueW(pBuffer, '\', Pointer(pVersionInfo), dwLen) then
              begin
                if not GotRtlVer then
                  begin
                    Result.Major := HiWord(pVersionInfo^.dwFileVersionMS);
                    Result.Minor := LoWord(pVersionInfo^.dwFileVersionMS);
                  end;
                Result.Build := HiWord(pVersionInfo^.dwFileVersionLS);
                Result.Revision := LoWord(pVersionInfo^.dwFileVersionLS);
              end;
          end;
      finally
        FreeMem(pBuffer);
      end;
    end;
end;

var
  WindowsVersion: TWindowsVersion;
begin
  WindowsVersion := GetWindowsVersion;
  WriteLn(Format('Windows version: %d.%d.%d.%d', [WindowsVersion.Major, WindowsVersion.Minor, WindowsVersion.Build, WindowsVersion.Revision]));
  WriteLn('Done');
  ReadLn;
end.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Windows Version ermitteln

  Alt 27. Mai 2024, 19:14
PS: Nicht im GetIt nach WMI suchen!
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mmw

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

AW: Windows Version ermitteln

  Alt 27. Mai 2024, 19:37
evtl. hier -
https://github.com/NeftaliDelphi/GLi...readme-ov-file

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.745 Beiträge
 
Delphi 2007 Professional
 
#26

AW: Windows Version ermitteln

  Alt 27. Mai 2024, 20:37
PS: Nicht im GetIt nach WMI suchen!
Ok, IDE startet...
Uli Gerhardt
  Mit Zitat antworten Zitat
Willie1

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

AW: Windows Version ermitteln

  Alt 29. Mai 2024, 18:12
Die Methode von mmw funktioniert bei Windows 10 und 11 und wird auch bei 12(?) laufen. Ich übernehme sie . Major, Minor usw. werden von Windows 11 ignoriert.

CodeZwerg: ich bin mit Delphi Berlin nicht gerade aktuell aber Delphi 2006 und Turbo Delphi sind mit meinem alten Notebook voriges Jahr gestorben.

Schönen Feiertag in den entsprechenden Bundesländern Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.

Geändert von Willie1 (29. Mai 2024 um 18:14 Uhr)
  Mit Zitat antworten Zitat
mmw

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

AW: Windows Version ermitteln

  Alt 30. Mai 2024, 18:44
Hallo,

Nachtrag -

mit den bei den Jedi- Komponenten vorhandenen unit 'jclSysInfo' funktioniert es auch (sollte, mit Delphi 10.4.2 Starter getestet)

'jclSysInfo.GetWindowsVersionString'
'jclSysInfo.GetWindowsBuildNumber'

Gruß

Geändert von mmw (30. Mai 2024 um 20:20 Uhr)
  Mit Zitat antworten Zitat
Willie1

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

AW: Windows Version ermitteln

  Alt 31. Mai 2024, 16:41
mit den bei den Jedi- Komponenten vorhandenen unit 'jclSysInfo' funktioniert es auch (sollte, mit Delphi 10.4.2 Starter getestet)

'jclSysInfo.GetWindowsVersionString'
'jclSysInfo.GetWindowsBuildNumber'
Das ist gut zu wissen. Ich sehe, bei Delphi 11 liefert SysUtils.TOSVersion.ToString das richtige Ergebnis bei Win 10 und 11.
Wille
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   

 

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 19:20 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