Получение информации USB с Delphi на Vista

Как я могу получить 'Информация о подключенном USB(идентификатор экземпляра устройства, имя ключа драйвера ..) из реестра в Vista или Windows 7 с помощью delphi? Где эта информация в реестре Windows? У меня есть код этоработает на XP, но не на Vista. (C ++ код:http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx) Почему код не работает на Vista? Я'Я действительно стекаю об этом. Пожалуйста помоги.

Большое спасибо за ваши ответы.

 Jim McKeeth18 дек. 2009 г., 22:23
Вы можете принять ответ!

Ответы на вопрос(1)

Вы можете использоватьWMI учебный классWin32_DiskDrive, если вам нужно получить информацию о логическом диске, вы можете запросить wmi что-то вроде этого

Select * Win32_LogicalDisk where DriveType = 2

чтобы получить доступ кWMI из delphi вы должны импортировать библиотеку Microsoft WMIScripting V1.x, используя Component->Импортировать компонент->Импорт библиотеки типов->Дальше->»Выберите библиотеку "->Дальше->Добавить объект в проект->Конец.

если вам нужна дополнительная информация об USB-устройствах, вы можете проверить также следующие классы

Win32_USBControllerDeviceWin32_PnPEntity

Посмотрите этот пример (протестировано в Delphi 2007 и Windows 7)

program GetWMI_USBConnectedInfo;

{$APPTYPE CONSOLE}

uses
  Classes,
  ActiveX,
  Variants,
  SysUtils,
  WbemScripting_TLB in '..\..\..\Documents\RAD Studio\5.0\Imports\WbemScripting_TLB.pas';


procedure  GetUSBDiskDriveInfo;
var
  WMIServices : ISWbemServices;
  Root        : ISWbemObjectSet;
  Item        : Variant;
  i           : Integer;
  StrDeviceUSBName: String;
begin
  WMIServices := CoSWbemLocator.Create.ConnectServer('.', 'root\cimv2','', '', '', '', 0, nil);
  Root  := WMIServices.ExecQuery('Select * From Win32_DiskDrive Where InterfaceType="USB"','WQL', 0, nil);//more info in http://msdn.microsoft.com/en-us/library/aa394132%28VS.85%29.aspx
  for i := 0 to Root.Count - 1 do
  begin
    Item := Root.ItemIndex(i);
    Writeln('Caption           '+VarToStr(Item.Caption));
    Writeln('DeviceID          '+VarToStr(Item.DeviceID));
    Writeln('FirmwareRevision  '+VarToStr(Item.FirmwareRevision));
    Writeln('Manufacturer      '+VarToStr(Item.Manufacturer));
    Writeln('Model             '+VarToStr(Item.Model));
    Writeln('PNPDeviceID       '+VarToStr(Item.PNPDeviceID));
    Writeln('Status            '+VarToStr(Item.Status));
  End;
end;


begin
  try
    CoInitialize(nil);
    GetUSBDiskDriveInfo;
    Readln;
    CoUninitialize;
  except
    on E:Exception do
    Begin
        CoUninitialize;
        Writeln(E.Classname, ': ', E.Message);
        Readln;
    End;
  end;
end.
 RRUZ08 нояб. 2009 г., 09:48
@ Брайан, вы должны проверить в опции "Импорт библиотеки типов " (не activex) и поиск по спискуБиблиотека Microsoft WMI Scripting V1.2 "
 Brian Frost08 нояб. 2009 г., 09:02
@RRUZ: Это очень полезно. В моей среде IDE (Delphi 7, Windows 7) я вижу, что этот элемент управления Active X отсутствует в списке. Нужен ли специальный SDK? Спасибо, Брайан.
 user20478010 нояб. 2009 г., 10:27
Это действительно полезно. Большое спасибо.

Ваш ответ на вопрос