Einzelnen Beitrag anzeigen

Benutzerbild von FriedrichAT
FriedrichAT

Registriert seit: 25. Mai 2019
Ort: Wien
37 Beiträge
 
Delphi 12 Athens
 
#10

AW: Windows Version inkl. Win 11 ermitteln

  Alt Heute, 00:30
Hallo habe hier etwas gefunden - WMI

Delphi-Quellcode:
Uses System.Win.ComObj, WinApi.ActiveX;

function WMI_Get_Betriebssystem(const Mit_Version: Boolean = False): String;
const
  wbemFlagForwardOnly = $00000020;
var
  FSWbemLocator: OLEVariant;
  FWMIService: OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject: OLEVariant;
  iEnum: IEnumvariant;
  iValue: Cardinal;
begin
  Result := '?';
  try
    FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
    FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
    FWbemObjectSet := FWMIService.ExecQuery('SELECT Name, Version FROM Win32_OperatingSystem',
                                            'WQL', wbemFlagForwardOnly);
    iEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumvariant;

    if iEnum.Next(1, FWbemObject, iValue) = 0 then
    begin
      Result := String(FWbemObject.Name);
      if Pos('|', Result) > 0 then
        Result := Copy(Result, 1, Pos('|', Result) - 1);

      if Pos('Microsoft ', Result) > 0 then
        Try
          Result := Trim(Copy(Result, Pos('Microsoft ', Result) + 10, 40));
        except
        end;

      if Mit_Version then
        Result := Result + ' [ ' + String(FWbemObject.Version) + ' ]';

      FWbemObject := Unassigned;
    end;
  except
    try
      Result := WMI_Get_Betriebssystem;
    except
      Result := '?';
    end;
  end;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  try
    CoInitialize(nil);
    try
      Memo1.Lines.Add(WMI_Get_Betriebssystem(False));
    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;
  // Ausgabe: Windows 11 Pro
  try
    CoInitialize(nil);
    try
      Memo1.Lines.Add(WMI_Get_Betriebssystem(True));
    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;
  // Ausgabe: Windows 11 Pro [ 10.0.26100 ]
end;
Ausgabe:
Windows 11 Pro
Windows 11 Pro [ 10.0.26100 ]
Friedrich
  Mit Zitat antworten Zitat