私のアプリケーション (Delphi) では、すべての USB ストレージ デバイスを一覧表示する必要があります。これらは、フラッシュ メモリ スティックまたは外部ストレージ ドライブのいずれかです。
Jvcl
コンポーネントがありJvDriveCombo
、DriveType
プロパティがあります-問題はDriveType := Fixed
、外部ドライブに加えて内部ドライブ(など)を選択すると、リストされることC:\
ですD:\
。ただし、外部ドライブのみを一覧表示したいです。
DeviceIoControl 関数があると思います (MSDN で見ました) が、その使用方法がわかりません。
USBストレージデバイスをリストするための適切な方法/コードを誰かが手伝ってくれるのでしょうか?
ありがとう。
編集:
サンプルコードを見つけたので、ここに投稿しています:
uses .... jwawinbase, JwaWinIoctl;
procedure TForm1.Button1Click(Sender: TObject);
var
DriveCmdStr: string;
DriveHandle: THandle;
ADriveLetter: string;
hp: STORAGE_HOTPLUG_INFO;
rlen: DWORD;
begin
ADriveLetter := 'H';
DriveCmdStr := Format('\\.\%s:', [ADriveLetter]);
DriveHandle := CreateFile(PChar(DriveCmdStr), GENERIC_READ, FILE_SHARE_WRITE,
nil, OPEN_EXISTING, 0, 0);
if DriveHandle = INVALID_HANDLE_VALUE then
Exit;
DeviceIoControl(DriveHandle, IOCTL_STORAGE_GET_HOTPLUG_INFO, nil, 0, @hp,
SizeOf(hp), @rlen, nil);
CloseHandle(DriveHandle);
if hp.MediaRemovable then
showmessage('media removable');
end;
ここで、すべてのドライブ文字を列挙する方法を知りたいと思います。最も効率的な関数はどれですか?