Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Вниз

Проблема с 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
1-1103013273
paule
2004-12-14 11:34
2004.12.26
перекодировка текста


14-1102058586
КаПиБаРа
2004-12-03 10:23
2004.12.26
Есть ссылки на расписание поездов из Самары в сторону Челябинска?


4-1100368383
axx
2004-11-13 20:53
2004.12.26
Помогите с SendMessage


14-1102063862
TUser
2004-12-03 11:51
2004.12.26
Версии


1-1102956080
Stot1k
2004-12-13 19:41
2004.12.26
Обработка блоков текста





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский