Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

Проблема с WMI   Найти похожие ветки 

 
pavel_guzhanov   (2004-10-25 09:21) [0]

Добрый день!
Написал я программку, которая с помощью WMI выдает информацию об установленных в компьютере железяках. В частности для получения инфы о CDROM использую класс Win32_CDROMDrive. Определяю имя CDROM, все работает нормально. Но если в компьютере установлено 2сидюка, то инфа получается только об одном. Отсюда вопрос, как мне получить информацию об обоих CDROM? Ведь WMI CimStudio их прекрасно видит. Я пробовал указать у Get_Value индексы, но Delphi ругается на это


 
Ozone ©   (2004-10-25 09:24) [1]

Читал статью на королевстве? Еще раз внимательно прочитай и просмотри все исходники.


 
Дмитрий Ботвин   (2004-10-25 09:31) [2]

Попробуй вот так:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs,ActiveX, WbemScripting_TLB,
StdCtrls, ComCtrls, ExtCtrls ;

function ADsEnumerateNext(pEnumVariant: IEnumVARIANT;
cElements: ULONG; var pvar: OleVARIANT;
var pcElementsFetched: ULONG): HRESULT; safecall;
external "activeds.dll";

type
TForm1 = class(TForm)
  Memo1: TMemo;
  Button1: TButton;
  Edit1: TEdit;
  procedure Button1Click(Sender: TObject);
private
  { Private declarations }
public
  { Public declarations }
  procedure GetInfo(CompName: String);
end;

var
Form1: TForm1;

implementation

procedure DumpWMI_Process(Process: SWBemObject;Memo:TMemo);
var
Enum: IEnumVARIANT;
varArr: OleVariant;
lNumElements: ULong;
SProp: ISWbemProperty;
Prop: OleVariant;
PropName: 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
    PropName  := SProp.Name;
    Prop := SProp.Get_Value;
    if VarTypeAsText(VarType(Prop))="Array Variant" then PropValue := ""
    else PropValue :=VarToStr(Prop);
    Memo.Lines.Add(PropName + " = " + PropValue);
  end;
end;
end;

{$R *.dfm}

procedure TForm1.GetInfo(CompName: String);
var
Enum: IEnumVARIANT;
varArr: OleVariant;
lNumElements: ULong;
AName: array[0..255] of Char;
ASize: DWORD;
begin
Memo1.Lines.Clear;
try
  Memo1.Lines.BeginUpdate;
  Enum := CoSWbemLocator.Create.ConnectServer
 (CompName, "root\cimv2", "", "", "", "", 0, nil).ExecQuery
 ("Select * from "+"Win32_CDROMDrive", "WQL",
 wbemFlagBidirectional, nil)._NewEnum as IEnumVariant;
 while (Succeeded(ADsEnumerateNext(Enum, 1, varArr,
 lNumElements))) and (lNumElements > 0) do
    begin
      DumpWMI_Process(IUnknown(varArr) as SWBemObject,Memo1);
    end;
finally
  Memo1.Lines.EndUpdate;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
GetInfo(Trim(Edit1.Text));
end;

end.

Здесь Edit1.Text - имя компа, на котором ты хош узнать про CD-ROM


 
pavel_guzhanov   (2004-10-25 09:42) [3]

А можно с комментариями? А то не хочется тупо скопировать код, желательно бы разобраться...


 
Дмитрий Ботвин   (2004-10-25 09:43) [4]

Какой момент не понятен???


 
pavel_guzhanov   (2004-10-25 10:01) [5]

Лучше бы от начала до конца, ибо это мой первый опыт использования WMI


 
Дмитрий Ботвин   (2004-10-25 10:16) [6]

Этот код я составил на основе статьи о применении WMI в Delphi:
http://delphi.olympus.ru/dk/mastering/wmi.htm
Я думаю там более корректно написано каким образом использовать
WMI, т.к. я тока составил код на основе этой статьи...


 
pavel_guzhanov   (2004-11-15 12:59) [7]


> Дмитрий Ботвин

Спасибо большое! Вернулся к этой задаче, разобрался, все работает



Страницы: 1 вся ветка

Текущий архив: 2004.12.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
14-1101818942
msguns
2004-11-30 15:49
2004.12.26
В Одессе за доллар просят 10 гр.


1-1102668128
Usat|k
2004-12-10 11:42
2004.12.26
Форма на все окно


1-1102592426
SINIY BELIY
2004-12-09 14:40
2004.12.26
Как вставить формулы из Worda в проект?


14-1102401897
Кудесник
2004-12-07 09:44
2004.12.26
Существуют ли мелкие бесперебойники для питания свичей?


4-1100189391
Dominus
2004-11-11 19:09
2004.12.26
Раскладка клавиатуры