Содержание материала

5. Примеры.

5.1. Получение данных о центральном процессоре.

Этот первый пример я старался сделать как можно нагляднее и разберу я его достаточно подробно. В остальных же 3-х примерах я не буду повторяться в комментариях, а постараюсь продемонстрировать некоторые приёмы, которые, возможно, помогут вам в дальнейшем в ваших собственных программах.

Создаём новый проект и добавляем к нему компоненту TSWbemLocator, которая должна появиться в палитре компонент после импортирования указанных выше библиотек типов. Далее я буду давать комментарии непосредственно в коде программы.

Code:

unit Unit1;

 

interface

 

uses

…, WbemScripting_TLB, OleServer, ActiveX;

type

TForm1 = class(TForm)

   …

     SWbemLocator1: TSWbemLocator;

   …;

private

   { Private declarations }

   procedure ShowProp(SProp: SWBemProperty);

public

   { Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

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;

begin

// см. Примечание 1

Service := SWbemLocator1.ConnectServer('.', 'root\CIMV2', '', '', '', '', 0,

   nil);

// см. Примечание 2

SObject := Service.Get('Win32_Processor', wbemFlagUseAmendedQualifiers, nil);

// см. Примечание 3

ObjectSet := SObject.Instances_(0, nil);

{

Далее нам нужно из коллекции ObjectSet получить экземпляр объекта,

соответствующий классу Win32_Processor.

Делается это с помощью метода Item объекта ObjectSet.

В качестве первого параметра этого метода указывается путь к объекту,

экземпляр которого вы желаете извлечь из коллекции.

Данный метод возвращает объект типа SWbemObject. Но нам не известно, как выглядит этот путь.

Использовать дополнительный класс SwbemObjectPath тоже нет никакого желания.

Так что делаю "финт ушами":

}

//  SObject:= ObjectSet.Item('???', 0);

 

Enum := (ObjectSet._NewEnum) as IEnumVariant;

Enum.Next(1, TempObj, Value);

SObject := IUnknown(TempObj) as SWBemObject;

{

Полагаю, что данный приём понятен читателю и в комментариях не нуждается.

 

Вот практически и всё - осталось прочитать интересующие нас свойства.

Сколько было слов и как всё просто оказалось в действительности :)

 

Перебираем свойства объекта SObject:

}

while (PropEnum.Next(1, TempObj, Value) = S_OK) do

begin

   SProp := IUnknown(TempObj) as SWBemProperty;

   StrValue := '';

   ListBox1.AddItem(SProp.Name, nil);

   ShowProp(SProp);

end;

end;

 

procedure TForm1.ShowProp(SProp: SWBemProperty);

begin

if (SProp.Get_Value < > null) then

begin

   with SProp do

   begin

     if Name = 'Name' then

       Label2.Caption := Get_Value

     else if Name = 'Manufacturer' then

       ….

 

   end; { with }

end; { if }

end;

 

end.

  

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить