Здравствуйте, lka_76, Вы писали:
_>Добрый день!
_>пытаюсь научиться работать с WMI на Delphi.
_>столкнулся с проблемами:
А что конкретно вам не понятно? Как импортировать библиотеку типов?
В Delphi Project -> Import Type Library... В открывшемся окне в списке выбираем Microsoft WMI Scripting V1.2 Library(Version 1.2)
(Версия у вас может отличаться). Давим кнопку Create Unit. У меня после этого образовался юнит WbemScripting_TLB.pas.
Запрос 'select * from Win32_BaseBoard' возвращает коллекцию объектов Win32_BaseBoard. Поэтому к элементам нужно обращатся через энумератор. Вот пример который перечисляет и выводит в листбокс все свойства первой Win32_BaseBoard.
procedure TMainForm.Run;
var
Service: ISWbemServices;
ObjectSet: ISWbemObjectSet;
SObject: ISWbemObject;
PropSet: ISWbemPropertySet;
SProp: ISWbemProperty;
PropEnum, Enum: IEnumVariant;
TempObj, PropVal: OleVariant;
Value: Cardinal;
LI: TListItem;
vt: TVarType;
begin
LVProp.Items.Clear;
SWbemLocator:= TSWbemLocator.Create(Nil);
try
SWbemLocator:= TSWbemLocator.Create(Self);
Service:= SWbemLocator.ConnectServer('.', 'root\CIMV2', '', '', '', '', 0, nil);
SObject:= Service.Get('Win32_BaseBoard', wbemFlagUseAmendedQualifiers, nil);
ObjectSet:= SObject.Instances_(0, nil);
Enum:= (ObjectSet._NewEnum) as IEnumVariant;
Enum.Next(1, TempObj, Value);
SObject:= IUnknown(TempObj) as SWBemObject;
PropSet := SObject.Properties_;
PropEnum := (PropSet._NewEnum) as IEnumVariant;
while (PropEnum.Next(1, TempObj, Value) = S_OK) do
begin
SProp:= IUnknown(TempObj) as SWBemProperty;
LI:= LVProp.Items.Add;
LI.Caption:= SProp.Name;
PropVal:= SProp.Get_Value;
if PropVal <> Null then
LI.SubItems.Add(PropVal)
else
LI.SubItems.Add('-');
end;
finally
SWbemLocator.Free;
end;
end;
...<< RSDN@Home 1.2.0 alpha rev. 649>>
...Foobar {silent}