在我的應用程序(Delphi)中,我需要列出所有USB存儲設備。這些可以是閃存棒或外部存儲驅動器。德爾福 - 如何獲得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;
現在我想只要知道如何枚舉所有驅動器號。哪個是最有效的功能?
工程!感謝您的麻煩! – 2010-09-15 15:13:25
完美,但是「{$ MINENUMSIZE 4}」真的有必要嗎? – Peter 2011-09-21 05:38:08
@Peter好吧,'BusType'字段應占用4個字節。通常Delphi只會分配儘可能多的字節來存儲枚舉的任何值(在本例中爲1個字節),除非您使用'$ MINENUMSIZE'指令指定最小枚舉大小。您也可以將'BusType'聲明爲'DWORD'並將其轉換爲'STORAGE_BUS_TYPE'。 – 2011-09-21 11:46:07