Главная страница
    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.047 c
1-1102706736
kirilllius
2004-12-10 22:25
2004.12.26
Привязка ПО к CD


9-1093282124
Creep
2004-08-23 21:28
2004.12.26
Как ввести в игру свой шрифт? Стандартными средствами Delphi7.


3-1101714110
nstur
2004-11-29 10:41
2004.12.26
Как определить обязательное поле или нет?


1-1102600798
гость
2004-12-09 16:59
2004.12.26
Как вытащить иконку из окна если есть его хендл?


1-1102867259
Elc_
2004-12-12 19:00
2004.12.26
Dll MDIForm





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский