2009-11-06 20 views
5

Come posso ottenere 'info usb connesse' (id di istanza del dispositivo, nome della chiave del driver ..) dal registro in Vista o Windows 7 usando delphi? Dove si trova questa informazione nel registro di Windows? Ho un codice che funziona su XP ma non su Vista. (Codice C++: http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx) Perché il codice non funziona su Vista? Sono davvero impaziente. Per favore aiuto.Come connettere le informazioni USB con Delphi su Vista

Grazie mille per le vostre risposte.

+0

Si consiglia di accettare la risposta! –

risposta

10

È possibile utilizzare la classe WMIWin32_DiskDrive. se avete bisogno di ottenere informazioni circa l'unità logica è possibile interrogare il wmi con qualcosa di simile

Select * Win32_LogicalDisk where DriveType = 2 

per accedere al WMI da Delfi è necessario importare il V1.x libreria Microsoft WMIScripting utilizzando Component-> Importa Component-> Importa digita libreria-> Avanti -> "Seleziona la libreria" -> Avanti-> Aggiungi unità a progetto-> Fine.

se avete bisogno di ulteriori informazioni sui dispositivi USB è possibile controllare anche i prossimi classi

Vedere questo esempio (testato in Delphi 2007 e 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: questo è molto utile. Vedo nel mio IDE (Delphi 7, Windows 7) che questo controllo Active X non è elencato. Ho bisogno di uno SDK speciale? Grazie, Brian. –

+0

@Brian, è necessario selezionare l'opzione "Importa libreria tipi" (non activex) e cercare nell'elenco "Libreria Microsoft WMI Scripting V1.2" – RRUZ

+0

Ciò è veramente utile. Molte grazie. –

Problemi correlati