Delphi Tips: Работаем с WMI на Delphi.
WMI - Windows Management Instrumentation . Что же это такое? В общих чертах, это система, позволяющая получать информацию об обьектах системы, а также менять статичную информацию в Common Information Model (CIM). А если более простым языком, то - Можно получать почти любую информацию о компьютере. Список девайсов, тип процессора, видеокарты и многое другое. Полный список можно найти в справочном руководстве MSDN
<br/><br/>Как реализовать доступ к информации WMI на примере Delphi?
<br/>Для начала Вам надо установить в самом Дельфи необходимые компоненты, а точнее экспортировать Type Library. Для этого жмем Project->Import Type Library, в появившемся окне ищем Microsft WMI Scripting. Если вы не нашли его в списке, то нажмите Add...
WMI - Windows Management Instrumentation . Что же это такое? В общих чертах, это система, позволяющая получать информацию об обьектах системы, а также менять статичную информацию в Common Information Model (CIM). А если более простым языком, то - Можно получать почти любую информацию о компьютере. Список девайсов, тип процессора, видеокарты и многое другое. Полный список можно найти в справочном руководстве MSDN
Как реализовать доступ к информации WMI на примере Delphi?
Для начала Вам надо установить в самом Дельфи необходимые компоненты, а точнее экспортировать Type Library. Для этого жмем Project->Import Type Library, в появившемся окне ищем Microsft WMI Scripting. Если вы не нашли его в списке, то нажмите Add и в каталоге Windows\System32\wbem найдите wbemdisp.tlb (в Windows 2000 этот файл может находится в каталоге Windows\System32. После того, как Вы выбрали этот файл и добавили его в список, вам просто надо нажать кнопку Install и не забудьте поставить галочку на Create Component Wrapper!
Теперь можно приступать к самой работе. Полностью исходник программы назодится по этому адресу
http://cp.people.overclockers.ru/cgi-bin/dl.pl?id=1445&filename=wmi.rar
Вот такая строка создает IEnumVariant, который содержит полученную информацию о классе Win32_Process. Каждый класс имеет свою структуру и потому чтобы вывести информацию о любом классе даже не зная его структуру, создадим вот такую функцию
Эта функция просто делает дамп обьекта в переданный TMemo, заремаренные строки выводили также и тип поля (String, int и так далее).
Знаю, что почти ничего тут не описал толком, но WMI это очень большая тема и выходит за рамки простой заметки. Экспериментировать Вы можете сами, используя предоставленные исходники.
Как реализовать доступ к информации WMI на примере Delphi?
Для начала Вам надо установить в самом Дельфи необходимые компоненты, а точнее экспортировать Type Library. Для этого жмем Project->Import Type Library, в появившемся окне ищем Microsft WMI Scripting. Если вы не нашли его в списке, то нажмите Add и в каталоге Windows\System32\wbem найдите wbemdisp.tlb (в Windows 2000 этот файл может находится в каталоге Windows\System32. После того, как Вы выбрали этот файл и добавили его в список, вам просто надо нажать кнопку Install и не забудьте поставить галочку на Create Component Wrapper!
Теперь можно приступать к самой работе. Полностью исходник программы назодится по этому адресу
http://cp.people.overclockers.ru/cgi-bin/dl.pl?id=1445&filename=wmi.rar
CoSWbemLocator.Create.ConnectServer(Server, 'root\cimv2', '',
'', '', '', 0, nil).ExecQuery('Select * from Win32_Process', 'WQL',
wbemFlagBidirectional, nil)._NewEnum as IEnumVariant; Вот такая строка создает IEnumVariant, который содержит полученную информацию о классе Win32_Process. Каждый класс имеет свою структуру и потому чтобы вывести информацию о любом классе даже не зная его структуру, создадим вот такую функцию
procedure DumpWMI_Process(Process: SWBemObject;Memo:TMemo);
var
Enum: IEnumVARIANT;
varArr: OleVariant;
lNumElements: ULong;
SProp: ISWbemProperty;
Prop: OleVariant;
PropName: string;
//PropType: string;
PropValue: string;
begin
Memo.Lines.Add('+ WMI Path: ' + Process.Path_.Path);
Enum := Process.Properties_._NewEnum as IEnumVariant;
while (Succeeded(ADsEnumerateNext(Enum, 1, VarArr, lNumElements))) and
(lNumElements > 0) do
begin
if Succeeded(IDispatch(varArr).QueryInterface(SWBemProperty, SProp)) and
Assigned(SProp) then
begin
try
PropName := SProp.Name;
Prop := SProp.Get_Value;
//PropType := VarTypeAsText(VarType(Prop));
PropValue := VarToStr(Prop);
Memo.Lines.Add(' + ' + PropName + (*'[' + PropType +*) '] = ' + PropValue);
except
on E: Exception do
begin
end;
end;
end;
end;
end;
Эта функция просто делает дамп обьекта в переданный TMemo, заремаренные строки выводили также и тип поля (String, int и так далее).
Знаю, что почти ничего тут не описал толком, но WMI это очень большая тема и выходит за рамки простой заметки. Экспериментировать Вы можете сами, используя предоставленные исходники.
Лента материалов
Правила размещения комментариев
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.


Сейчас обсуждают