2009-11-06 20 views
5

¿Cómo puedo obtener 'información usb conectada' (ID de instancia del dispositivo, nombre de la clave del controlador ...) desde el Registro en Vista o Windows 7 utilizando delphi? ¿Dónde está esta información en el Registro de Windows? Tengo un código que está trabajando en XP pero no en Vista. (Código de C++: http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx) ¿Por qué el código no funciona en Vista? Estoy realmente apilado sobre eso. Por favor ayuda.Cómo conectarse Información USB con Delphi en Vista

Muchas gracias por sus respuestas.

+0

Es posible que desee aceptar la respuesta! –

Respuesta

10

Puede usar la clase WMIWin32_DiskDrive. si necesita obtener información sobre la unidad lógica puede consultar la WMI con algo como esto

Select * Win32_LogicalDisk where DriveType = 2 

para acceder a la WMI de Delphi debe importar el V1.x Biblioteca Microsoft WMIScripting usando Componente-> Importar Componente-> Importar type library-> Next -> "Select the library" -> Next-> Add unit to project-> Finish.

, si necesita más información sobre los dispositivos USB se puede comprobar también las siguientes clases

Ver este ejemplo (probado en Delphi 2007 y 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. 
+0

@RRUZ: Esto es muy útil. Veo en mi IDE (Delphi 7, Windows 7) que este control Active X no aparece en la lista. ¿Necesito un SDK especial? Gracias, Brian. –

+0

@Brian, debe marcar la opción "Importar tipo de biblioteca" (no activex) y buscar en la lista "Biblioteca WMI Scripting V1.2 de Microsoft" – RRUZ

+0

Esto es realmente útil. Muchas gracias. –

Cuestiones relacionadas