2009-11-06 30 views
5

delphiを使用してVistaまたはWindows 7のレジストリから「接続されたUSB情報」(デバイスインスタンスID、ドライバキー名..)を取得するにはどうすればよいですか? Windowsレジストリ内のこの情報はどこにありますか? 私はXPでは動作していますが、Vistaでは動作しないコードを持っています。(C++コード:http://www.codeproject.com/KB/system/RemoveDriveByLetter.aspx) Vistaでコードが動作しないのはなぜですか? 私は本当にそれについて積み重ねています。助けてください。Vistaのデルファイで接続されたUSB情報を取得する

お返事ありがとうございます。

+0

答えを受け入れることをお勧めします。 –

答えて

10

WMIクラスWin32_DiskDriveを使用できます。あなたは、論理ドライブに関する情報を取得が必要な場合、あなたはコンポーネント - > [インポートコンポーネント - >インポートを使用して、Microsoft 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:これは非常に便利です。私は私のIDE(Delphi 7、Windows 7)にこのActive Xコントロールがリストされていないことがわかります。私は特別なSDKが必要ですか?ありがとう、ブライアン。 –

+0

@Brianの場合、「タイプライブラリをインポートする」(アクティブではない)オプションをチェックインし、「Microsoft WMIスクリプティングV1.2ライブラリ」のリストで検索する必要があります。 – RRUZ

+0

これは本当に便利です。どうもありがとう。 –

関連する問題