Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопросы возникли по получению инфы с помощью WMI :) [D5, Win95/98, Win2k, WinXP]


TankMan ©   (2004-11-30 14:15:00) 

Вот недавно (месяц назад) спрашивал как получить инфу о видеокарте, чипсете и тому подобную инфу - Посоветовали WMI использовать - Ну я вобщем-то почитал на счет WMI некоторую инфу, посмотрел примерчик(два,три,ну может четыре) Вроде почти все понял как да зачем и решил по экспериментировать, врезультате таких вот экспериментов возникло несколько вопросов.

Какой объект нужно указывать в параметре функции Service.Get(..,) чтобы получить список устройства с неполадками? Вот например Sysinfo32 в подкаталоге "компоненты" есть раздел "Устройства с неполадками" вот там отображаются также неустановленные устройства, вот я хочу получить их список из программы?

Хотелось бы еще узнать мнение правилен ли этот код?
procedure TForm1.Button1Click(Sender: TObject);
var
 Service:             ISWbemServices;
 ObjectSet:         ISWbemObjectSet;
 SObject:            ISWbemObject;
 PropSet:            ISWbemPropertySet;
 SProp:               ISWbemProperty;
 PropEnum, Enum:      IEnumVariant;
 TempObj:                   OleVariant;
 Value:                         Cardinal;
 StrValue:                    string;
 Res:HResult;
begin
 Service:= SWbemLocator1.ConnectServer('.', 'root\CIMV2', '', '', '', '', 0, nil);
 SObject:= Service.Get('Win32_PnPEntity', wbemFlagUseAmendedQualifiers, nil);
 ObjectSet:= SObject.Instances_(0, nil);
//  SObject:= ObjectSet.Item('???',0);  <<Вот что сдесь указывать? например для 'Win32_PnPEntity' ?
 Enum:= (ObjectSet._NewEnum) as IEnumVariant;
 Res:=Enum.Next(1, TempObj, Value);
 while  (Res=0) and (listbox2.items.Count<120) do  begin
 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;
   StrValue:= '';
   ListBox1.Items.AddObject(SProp.Name, nil);
   ShowProp(SProp);
 end;
 Res:=Enum.Next(1, TempObj, Value);
 end; {while}
end;
procedure TForm1.ShowProp(SProp: SWBemProperty);
var s:string;
begin
 if (SProp.Get_Value <> null ) then
 begin
   with SProp do
   begin
   if sProp.name<>'' then
   s:=Get_Value;
   if Name='DeviceID' then
   ListBox2.Items.Add(sProp.name+' - '+s)
   else
   if Name='Description' then
   ListBox2.Items.Add(sProp.name+' - '+s)
   end; { with }
 end; { if }
end;

Почти такой код (почти без изменения касающихся вывода инфы) я взял из примера.


TankMan   (2004-12-01 07:26:00) [1]

Люди, ну поможите ж кто-нибудь?


TankMan   (2004-11-30 14:30:00) [2]

<<< Поправочка не Sysinfo32 а Msinfo32.exe которая находится в %WINDIR%\System32\dllcache (в ВинХР точно)

Так же хотелось бы узнать:
Win32_OnBoardDevice - Почему ничего не выдает :(
Win32_PhysicalMedia - я так понимаю это жесткие, но вот почему Manufacturer не выдается?
Win32_DriverVXD - не выдает ничего :(
Win32_Fan,Win32_Refrigeration,Win32_HeatPipe - почему-то не выдает ничего :(
Win32_Printer - а где посмотреть, что чего значит?

А еще, самое главное - как читать массивы, значения типа boolean и т.д.? В примере если свойство с типом boolean пишется в ListBox1 а вот в процедуре ShowProp, значение этого свойства вывести не удается в listbox2 :( да и массивы тоже не получается :(

Еще вот вопрос, допустим я используя Win32_IRQResource получаю все IRQ, но как получить устройства, которые "подключены на" это прерывание? т.е. Опять же смотря на Msinfo32.exe открывая закладку "Ресурсы аппаратуры" и заходя в раздел "Прерывания (IRQ)" - выдается список прерываний и устройств работающих на этих прерываниях, так вот, как получить эти устройства?
Когда я запускаю WMI Object Browser и выбираю Win32_IRQResource мне выдается дерево объектов, но вот как это реализовано, чтобы найдя например IRQ 10, я мог узнать какие объкты "прикреплены" к нему?

Воооот.. :) скока впросов получилось, но всеже надеюсь что никто не сочтет это за чрезмерную лень, и поможет мне...


Наверх

Титульная страница Поиск, карта сайта Написать письмо