Главная страница
    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.036 c
3-1101551289
sloug
2004-11-27 13:28
2004.12.26
DbListbox и dbgrid


14-1102357929
SteelMan
2004-12-06 21:32
2004.12.26
Корень n-й степени и среднее геометрическое на Паскале


4-1099505032
CAMCOH
2004-11-03 21:03
2004.12.26
Как программно проскролить текст в memo ?


3-1101713994
Fiend
2004-11-29 10:39
2004.12.26
не сохраняется DataSource


3-1101295329
Clone
2004-11-24 14:22
2004.12.26
DBGrid, Lookup Field, "Non-nullable column cannot be updated..."





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