В моем приложении (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;
Теперь я хотел бы просто знать, как перечислить все буквы дисков. Какая функция наиболее эффективна?