Форум: "WinAPI";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
ВнизВопросы возникли по получению инфы с помощью WMI :) Найти похожие ветки
← →
TankMan © (2004-11-30 14:15) [0]Вот недавно (месяц назад) спрашивал как получить инфу о видеокарте, чипсете и тому подобную инфу - Посоветовали 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-11-30 14:30) [1]<<< Поправочка не 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, я мог узнать какие объкты "прикреплены" к нему?
Воооот.. :) скока впросов получилось, но всеже надеюсь что никто не сочтет это за чрезмерную лень, и поможет мне...
← →
TankMan © (2004-12-01 07:26) [2]Люди, ну поможите ж кто-нибудь?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.062 c