Ich suche nach einer Möglichkeit WMI-abfragen einzusetzen ohne zu viel Code verwenden zu müssen.
Hier ein Teil des Codes den ich zurzeit einsetze:
Code: Alles auswählen
function GetWin32_OperatingSystemInfo: String;
const
WbemUser ='';
WbemPassword ='';
WbemComputer ='localhost';
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet: OLEVariant;
FWbemObject : Variant;
oEnum : IEnumvariant;
sValue : string;
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, nil) = 0 do
begin
result := '';
sValue:= FWbemObject.Properties_.Item('BootDevice').Value;
Result:=Format('BootDevice=%s',[sValue]);
FWbemObject:=Unassigned;
end;
Dazu habe ich gedacht statt
Code: Alles auswählen
function GetWin32_OperatingSystemInfo: String;
Code: Alles auswählen
FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem','WQL',wbemFlagForwardOnly);
Code: Alles auswählen
sValue:= FWbemObject.Properties_.Item('BootDevice').Value;
Code: Alles auswählen
function GetWin32_Info(classes: String; subclass: String): String;
Code: Alles auswählen
FWbemObjectSet:= FWMIService.ExecQuery(classes,'WQL',wbemFlagForwardOnly);
Code: Alles auswählen
sValue:= FWbemObject.Properties_.Item(subclass).Value;
GetWin32_Info würde als Parameter den Inhalt zweier Edit.text boxen erhalten, auch mit dem selben Inhalt wie zuvor:
edit1.text = 'SELECT * FROM Win32_OperatingSystem'
edit2.text = 'BootDevice'
man könnte also manuell jede verfügbare Klasse oder unterklasse verwenden mit dem Code - aber irgendwas scheint da nicht zu funktionieren.
Kompiliert wird das ganze ohne Probleme, wenn dieser jedoch den Befehl ausführen soll gibt er mir nur ein
Code: Alles auswählen
EOleException Die Anfrage ist ung?ltig. 80041017
Ich vermute das der Datentyp String nicht stimmt, was muss ich da stattdessen angeben?
Oder habe ich einen völligen Denkfehler und muss da komplett anders drangehen?
MfG,
Cee