Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Технологии , CD-ROM

Как это сделать через WMI я вроде разобрался.

Только не нравиться мне, что приходится перебирать в цикле все свойства

Win32_CDROMDrive. Может кто знает как сразу к конкретному свойству обратиться, т.е.

избавиться от строки "while PropEnum.Next(1, TempObj, Value) = S_OK do"

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

Code:

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.

Автор eralex

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

Вы пытаетесь найти способ получить производителя CD/DVD-устройства с помощью WMI в Delphi, и вам не нравится перебирать все свойства объекта Win32_CDROMDrive.

Да, есть способ доступа к конкретным свойствам без перебора всех из них. Вы можете использовать метод GetMethod интерфейса ISWbemObjectSet, чтобы получить экземпляр ISWbemProperty для конкретного свойства по имени.

Вот как вы можете модифицировать ваш код:

procedure TForm1.Button1Click(Sender: TObject);
   ...;
begin
  Service:= SWbemLocator1.ConnectServer('.', 'root\CIMV2', '', '', '', 0, nil);
  SObject:= Service.Get('Win32_CDROMDrive', wbemFlagUseAmendedQualifiers, nil);
  ObjectSet:= SObject.Instances_(0, nil);
  Enum:= (ObjectSet._NewEnum) as IEnumVariant;

  while Enum.Next(1, TempObj, Value) = S_OK do
  begin
    SObject:= IUnknown(TempObj) as SWBemObject;
    PropSet:= SObject.Properties_;
    SProp:= PropSet.GetMethod('Manufacturer', nil);
    if Assigned(SProp) then
      ListBox1.AddItem(SProp.Get_Value, nil);
  end;
end;

В этом коде мы используем метод GetMethod интерфейса ISWbemPropertySet, чтобы получить экземпляр ISWbemProperty для свойства 'Manufacturer'. Затем мы проверяем, является ли свойство-assigned, и добавляем его значение в список, если это так.

В статье описывается способ получения информации о производителе CD/DVD на языке Delphi с помощью компонента WMI (Windows Management Instrumentation).


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: CD-ROM ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-07-04 07:39:27/0.0063290596008301/0