Как узнать производителя CD/DVD?

Материал из DRKB

Как узнать производителя CD/DVD?[править | править код]

Как это сделать через WMI я вроде разобрался. Только не нравиться мне, что приходится перебирать в цикле все свойства Win32_CDROMDrive. Может кто знает как сразу к конкретному свойству обратиться, т.е. избавиться от строки "while PropEnum.Next(1, TempObj, Value) = S_OK do"

Вот рабочий пример для D7.


unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    SWbemLocator1: TSWbemLocator;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  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;
  dr: string;
begin
  ListBox1.Clear;
  Service := SWbemLocator1.ConnectServer('.', 'root\CIMV2', '', '', '','', 0, nil);
  SObject := Service.Get('Win32_CDROMDrive', wbemFlagUseAmendedQualifiers, nil);
  ObjectSet := SObject.Instances_(0, nil);
  Enum := (ObjectSet._NewEnum) as IEnumVariant;
  dr := '';
  while (Enum.Next(1, TempObj, Value) = S_OK) do
  begin
    SObject := IUnknown(TempObj) as SWBemObject;
    PropSet := SObject.Properties_;
    PropEnum := (PropSet._NewEnum) as IEnumVariant;
    while PropEnum.Next(1, TempObj, Value) = S_OK do
    begin
      SProp := IUnknown(TempObj) as SWBemProperty;
      if SProp.Name = 'Drive' then
        dr := SProp.Get_Value;
      if SProp.Name = 'Name' then
        ListBox1.AddItem(dr + '  ' + SProp.Get_Value, nil);
    end;
  end;
end;

end.


Source: Взято из http://forum.sources.ru
ID: 01410