
A mellékelt példa megnyitása előtt válasszuk a Project - Import type library menüpontot, majd keressük elő a Microsoft WMI Scripting tételt. Importálás után létrejön egy WbemScripting_TLB unit, mely komponenseket is tartalmaz, amelyeket célszerű rögtön telepítenünk.
Annak érdekében, hogy a processzor adatait elérjük, a Win32_Processor WMI osztály tulajdonságait kell lekérdeznünk. Az osztály számtalan property-vel rendelkezik, ezeket kigyűjtve megjelenítjük a Form ListBox komponensében.
A Form jobboldali szegmensében néhány property értékét megjelenítjük egy-egy címkén. Az osztály jellemzője, hogy a multiprocesszoros rendszerekben minden egyes processzort egy-egy Win32_Processor osztály reprezentál.
A mellékelt példában tehát felvesszük a kapcsolatot az osztállyal, és minden property-t kiértékelünk, majd amennyiben értékes adatot kapunk, azt megjelenítjük. A property-k karakterláncot vagy valamilyen numerikus értéket adnak eredményül.
A kapcsolatfelvételhez egy TSWbemLocator objektumot kell a Form-on elhelyeznünk. A TSWbemLocator komponens ConnectServer metódusával kapcsolódunk a rendszerünkhöz.
Service := SWbemLocator1.ConnectServer('.', 'root\CIMV2', '', '', '', '', 0, nil);
Az eredményül kapott ISWbemServices objektum Get metódusával érhetjük el az adott osztályt.
SObject:= Service.Get('Win32_Processor', wbemFlagUseAmendedQualifiers, nil);
Ahhoz, hogy az adott osztály property-jeit elérhessük, a Get metódus visszatérési értékeként kapott ISWbemObject objektum tulajdonságait kell felhasználnunk. Az objektum Instances_ metódusa adja vissza az objektumpéldányokat.
ObjectSet:= SObject.Instances_(0, nil);
Végeredményben egy ISWbemPropertySet kollekciót kell használnunk.
Enum:= (ObjectSet._NewEnum) as IEnumVariant;
Enum.Next(1, TempObj, Value);
SObject:= IUnknown(TempObj) as SWBemObject;
PropSet := SObject.Properties_;
PropEnum := (PropSet._NewEnum) as IEnumVariant;
A property-kollekció minden elemén végigmegyünk egy WHILE ciklussal, és meghívjuk a ListProperties saját metódusunkat, melyben elvégezzük az adott információ megjelenítését.
while (PropEnum.Next(1, TempObj, Value) = S_OK) do begin
prop:= IUnknown(TempObj) as SWBemProperty;
ListProperties(prop);
end;
A property-k közt találunk olyanokat, melyek konkrétan tartalmazzák az információt, mások viszont konstansokat tartalmaznak, melyek adott jelentéssel bírnak. Ilyen például a processzor osztály Architecture property-je, melynek 5 lehetséges értéke lehet, attól függően, hogy a processzor milyen architektúrával rendelkezik. Ezek lehetnek:
- 0: x86
- 1: MIPS
- 2: Alpha
- 3: PowerPc
- 6: ia64