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;