2009-11-06 16 views
5

Delphi kullanarak Vista veya Windows 7'deki Kayıttan 'bağlı usb bilgisi' (aygıt örneği kimliği, sürücü anahtarı adı ..) nasıl edinebilirim? Bu bilgi Windows Kayıt Defteri'nde nerede bulunuyor? XP'de çalışan ancak Vista'da olmayan bir kod var. (C++ kodu: http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx) Neden kod Vista'da çalışmıyor? Gerçekten bu konuda yığın yapıyorum. Lütfen yardım et.Vista'da Delphi ile bağlı USB bilgilerini alma

Cevabınız için çok teşekkürler.

+0

Cevabı kabul etmek isteyebilirsiniz! –

cevap

10

WMI sınıf Win32_DiskDrive'u kullanabilirsiniz. Mantıksal sürücü hakkında bilgi almak gerekiyorsa> İçe Microsoft WMIScripting V1.x Kütüphane Bileşenli> Al belli bileşikleri kullanarak aktarmanız gerekir delphi dan WMI erişmek için bu

Select * Win32_LogicalDisk where DriveType = 2 

gibi bir şeyle wmi sorgulayabilir tür kitaplığı-> İleri -> "Kitaplığı seç" -> Sonraki-> Projeye ekle -> Bitir.

bir sonraki sınıfları

(Delphi 2007 ve Windows 7'de test) bu örneğe bakın

da kontrol edebilirsiniz usb cihazlar hakkında daha fazla bilgiye ihtiyaç varsa
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: Bu son derece kullanışlıdır. IDE (Delphi 7, Windows 7) içinde bu Active X denetiminin listelenmediğini görüyorum. Özel bir SDK'ya ihtiyacım var mı? Sağol Brian. –

+0

@Brian, "Import type library" (activex değil) seçeneğini işaretlemeli ve "Microsoft WMI Scripting V1.2 Library" – RRUZ

+0

listesinde arama yapmalısınız. Bu gerçekten yararlıdır. Çok teşekkürler. –