2009-11-06 7 views
5

Vista 또는 Windows 7의 레지스트리에서 delphi를 사용하여 '연결된 USB 정보'(장치 인스턴스 ID, 드라이버 키 이름 ..)를 어떻게 얻을 수 있습니까? Windows 레지스트리에서이 정보는 어디에 있습니까? XP에서는 작동하지만 Vista에서는 작동하지 않는 코드가 있습니다. (C++ 코드 : http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx) Vista에서 코드가 작동하지 않는 이유는 무엇입니까? 나는 그것에 관해 정말로 쌓여있다. 도와주세요.Vista에서 Delphi로 USB 정보 가져 오기

답장을 보내 주셔서 감사합니다.

+0

답변을 수락 하시길 바랍니다. –

답변

10

WMI 클래스 Win32_DiskDrive을 사용할 수 있습니다. 논리 드라이브에 대한 정보를 얻을 필요하면 당신은> 가져 오기는 마이크로 소프트 WMIScripting V1.x 라이브러리 컴포넌트 -> 가져 오기 컴포넌트 -를 사용하여 가져와야합니다 델파이에서 WMI 액세스하려면이

Select * Win32_LogicalDisk where DriveType = 2 

같은과 WMI를 조회 할 수 있습니다 타입 라이브러리 -> 다음 -> "라이브러리 선택"-> 다음 -> 프로젝트에 유닛 추가 -> 마침.

당신은 당신이 다음 클래스

(델파이 2007 및 Windows 7에서 테스트)이 예를 참조

도 확인할 수있는 USB 장비에 관한 더 많은 정보를 필요로하는 경우
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 : 이것은 매우 유용합니다. 이 Active X 컨트롤이 나열되지 않은 것을 IDE (Delphi 7, Windows 7)에서 볼 수 있습니다. 특별한 SDK가 필요합니까? 고마워, 브라이언. –

+0

@Brian, "import type library"(액티브 x가 아님) 옵션을 체크하고 "Microsoft WMI Scripting V1.2 Library"목록에서 검색하십시오 – RRUZ

+0

이것은 정말 유용합니다. 고마워. –

관련 문제