Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Информация о чипсете


Автор: Romero 23.4.2007, 11:03
Необходимо получить модель чипсета. Первый вопрос: какие возможны варианты, откуда это брать?
Рассмотрел наиболее популярный способ (WMI):
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=698
Разобрался, поковырял. Вопрос второй: откуда именно (из какого класса и какой инстанции) брать нужную информацию? Перебрав различные варианты, обнаружил Processor to I/O Controller с названием моего чипсета в инстанциях класса Win32_PnPEntity. Пока больше нигде не вижу. Либо киньте тапком, где еще прочесть имя чипсета, либо скажите, на любой ли машине я смогу получить его, перебрав инстанции данного класса.

Автор: Romero 23.4.2007, 11:32
Нашел еще свойство Model в классе Win32_ComputerSystem. Вроде, то что нужно.
А ссылочкой на какой-нить мануал с описанием откуда чего брать в WMI не кинете?

Автор: Yanis 23.4.2007, 20:03
Ну я даже не знаю…
Romero, только никому, слышишь? Никому! smile
http://msdn2.microsoft.com/en-us/library/aa394582.aspx.

Автор: Romero 24.4.2007, 06:05
ОК, никому не скажу. Даже и не подумал искать такую информацию в MSDN  smile 

Автор: ama_kid 24.4.2007, 12:01
Romero
Залезь еще http://vstepanov78.narod.ru/prog.htm, там есть много всякого полезного, может и по процессору инфа подойдет...

Автор: Romero 24.4.2007, 15:18
Вопрос по использованию ISWbem.
Каким образом можно вывести интересующее меня свойство нужной инстанции нужного класса?
Как перебрать инстанции и свойства я понял, а как выбирать по заданным параметрам - не допру  smile 

Автор: Romero 24.4.2007, 16:04
Вот таким способом я перечисляю все свойства всех инстанций нужного класса:
Код

procedure TMainForm.GetInfo(ClassName:string);
var
  Service:ISWbemServices;
  ObjectSet:ISWbemObjectSet;
  SObject:ISWbemObject;
  PropSet:ISWbemPropertySet;
  SProp:ISWbemProperty;
  PropEnum,Enum:IEnumVariant;
  TempObj:OleVariant;
  Value:Cardinal;
begin
  Service:=SWbemLocator.ConnectServer('.','root\CIMV2','','','','',0,nil);
  SObject:=Service.Get(ClassName,wbemFlagUseAmendedQualifiers,nil);
  ObjectSet:=SObject.Instances_(0,nil);
  Enum:=(ObjectSet._NewEnum) as IEnumVariant;
  while (Enum.Next(1,TempObj,Value)=S_OK) 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;
          try
            ShowProp(SProp);
          except;
          end;
        end;
    end;
end;

Работает прекрасно.
А вот так я пытаюсь вывести нужное мне св-во заданной инстанции:
Код

procedure TMainForm.GetInfo(ClassName,InstanceName,PropertyName:string);
var
  Service:ISWbemServices;
  ObjectSet:ISWbemObjectSet;
  SObject:ISWbemObject;
  PropSet:ISWbemPropertySet;
  SProp:ISWbemProperty;
  TempObj:OleVariant;
begin
  Service:=SWbemLocator.ConnectServer('.','root\CIMV2','','','','',0,nil);
  SObject:=Service.Get(ClassName,wbemFlagUseAmendedQualifiers,nil);
  ObjectSet:=SObject.Instances_(0,nil);
  TempObj:=ObjectSet.Item(InstanceName,0);
  SObject:=IUnknown(TempObj) as SWBemObject;
  PropSet:=SObject.Properties_;
  TempObj:=PropSet.Item(PropertyName,0);
  SProp:=IUnknown(TempObj) as SWBemProperty;
  try
    ShowProp(SProp);
  except;
    Memo.Lines.Add('Error while get property value');
  end;
end;

Получаю общую ошибку при вызове GetInfo('Win32_ComputerSystem','имя_компа','Caption');
Чувствую, где-то с типами напутал  smile 

Автор: Romero 28.4.2007, 05:49
Помогите разобраться с использованием! Уже всё перепробовал, только полный перебор и работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)