![]() |
AW: Windows Version ermitteln
Zitat:
Mit WMI klappt das offensichtlich auch bei Windows 11. Bei ![]() |
AW: Windows Version ermitteln
Hallo,
das geht auch.
Delphi-Quellcode:
komplette Beschreibung hier -
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; ![]() habe ich mit dem glreichen Programm erstellt siehe #2. Der Code Schnipsel muss wieder angepasst werden. Gruß |
AW: Windows Version ermitteln
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. |
AW: Windows Version ermitteln
PS: Nicht im GetIt nach WMI suchen! :zwinker:
|
AW: Windows Version ermitteln
|
AW: Windows Version ermitteln
Zitat:
|
AW: Windows Version ermitteln
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. |
AW: Windows Version ermitteln
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ß |
AW: Windows Version ermitteln
Zitat:
Wille |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 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