2009-11-06 24 views
5

Làm cách nào để có được 'thông tin usb được kết nối' (id thiết bị, tên khóa trình điều khiển ..) từ Registry trong Vista hoặc Windows 7 bằng cách sử dụng delphi? Thông tin này ở đâu trong Windows Registry? Tôi có mã hoạt động trên XP nhưng không phải trong Vista. (C++ code: http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx) Tại sao mã không hoạt động trên Vista? Tôi thực sự ngăn xếp về điều đó. Hãy giúp tôi.Nhận thông tin USB được kết nối với Delphi trên Vista

Cảm ơn rất nhiều câu trả lời của bạn.

+0

Bạn có thể muốn chấp nhận câu trả lời! –

Trả lời

10

Bạn có thể sử dụng lớp WMIWin32_DiskDrive. nếu bạn cần nhận được thông tin về các ổ đĩa logic bạn có thể truy vấn WMI với một cái gì đó như thế này

Select * Win32_LogicalDisk where DriveType = 2 

để truy cập WMI từ delphi bạn phải nhập Microsoft WMIScripting v1.x Thư viện sử dụng Component-> Nhập Component-> Nhập type library-> Next -> "Chọn thư viện" -> Next-> Thêm đơn vị vào project-> Finish.

nếu bạn cần thêm thông tin về các thiết bị usb bạn có thể kiểm tra cũng là lớp tiếp theo

Xem ví dụ này (thử nghiệm trong Delphi 2007 và 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: Điều này rất hữu ích. Tôi thấy trong IDE của tôi (Delphi 7, Windows 7) rằng điều khiển Active X này không được liệt kê. Tôi có cần một SDK đặc biệt không? Cảm ơn, Brian. –

+0

@Brian, bạn phải kiểm tra trong tùy chọn "Nhập loại thư viện" (không activex) và tìm kiếm trong danh sách "Microsoft WMI Scripting V1.2 Library" – RRUZ

+0

Điều này thực sự hữu ích. Cảm ơn rất nhiều. –

Các vấn đề liên quan