在Vista上使用Delphi连接USB信息

时间:2009-11-06 12:21:10

标签: delphi usb

如何使用delphi从Vista或Windows 7中的Registry获取'connected usb info'(设备实例ID,驱动程序密钥名称..)? Windows注册表中的此信息在哪里? 我有一个代码,它在XP上工作但在Vista中没有。(c ++代码:http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx) 为什么代码不能在Vista上运行? 我真的很喜欢这个。请帮忙。

非常感谢您的回答。

1 个答案:

答案 0 :(得分:10)

您可以使用WMI班级Win32_DiskDrive。如果你需要获取有关逻辑驱动器的信息,你可以用这样的东西查询wmi

Select * Win32_LogicalDisk where DriveType = 2

要从delphi访问WMI,您必须使用Component->导入组件导入Microsoft WMIScripting V1.x库 - >导入类型库 - > Next->“选择库” - &gt ;下一步 - >将项目添加到项目 - >完成。

如果您需要有关USB设备的更多信息,您还可以查看下一个课程

请参阅此示例(在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.