Текущий архив: 2005.07.11;
Скачать: CL | DM;
ВнизКак определить Flash диск в системе ? Найти похожие ветки
← →
dreamse (2005-05-10 09:35) [0]В смысле отличить его от обычного жесткого диска ?
Функция :
case GetDriveType("C:\") of
0: ShowMessage("The drive type cannot be determined");
1: ShowMessage("The root directory does not exist");
DRIVE_REMOVABLE: ShowMessage("The disk can be removed");
DRIVE_FIXED: ShowMessage("The disk cannot be removed");
DRIVE_REMOTE: ShowMessage("The drive is remote (network) drive");
DRIVE_CDROM: ShowMessage("The drive is a CD-ROM drive");
DRIVE_RAMDISK: ShowMessage("The drive is a RAM disk");
end;
Выдаёт одно и тоже : The disk cannot be removed думает что это DRIVE_FIXED
Хотя я проверял на разных дисках , на жестком ( локальном ) и Flash
Может кто нибудь знает стандартное решение проверки ?
← →
GreatMaster (2005-05-10 10:10) [1]1. А ты точно вместо "С:\" указывал чё надо?
2. Пробовал ли на СД и др.? Вдруг ваще не работает?
3. Секи размер. Если меньше 1Гб - это флэш :)
← →
dreamse (2005-05-10 10:16) [2]> GreatMaster
1) Уже ответил в самом начале
2) Так же , нужно читать внимательнее вопрос :)
3) Решение конечно :) но во первых мне кажеться слишком корявым во вторых скоро уже будут в общем употреблении флешки больше 1 гб
Ещё варианты есть ?
Если пробывать определить номер диска при подколючении устройства :
const DBT_DEVICEARRIVAL = $8000;
const DBT_DEVICEQUERYREMOVE = $8001;
const DBT_DEVICEQUERYREMOVEFAILED = $8002;
const DBT_DEVICEREMOVEPENDING = $8003;
const DBT_DEVICEREMOVECOMPLETE = $8004;
const DBT_DEVICETYPESPECIFIC = $8005;
const DBT_CONFIGCHANGED = $0018;
// ******************* Работа с USB *********************
procedure TMain.WMDeviceChange(var message: TMessage);
var
s : string;
begin
{Do Something here}
case message.wParam of
DBT_DEVICEARRIVAL :
showessage("ok");
DBT_DEVICEQUERYREMOVE:
begin
s := "Permission to remove a device is requested";
ShowMessage(s);
{True grants premission}
message.Result := integer(true);
exit;
end;
DBT_DEVICEQUERYREMOVEFAILED :
s := "Request to remove a device has been canceled";
DBT_DEVICEREMOVEPENDING :
s := "Device is about to be removed";
DBT_DEVICEREMOVECOMPLETE :
showmessage("del");
DBT_DEVICETYPESPECIFIC :
s := "Device-specific event";
DBT_CONFIGCHANGED :
s:= "Current configuration has changed"
else
s := "Unknown Device Message";
end;
if s <> "" then ShowMessage(s);
inherited;
end;
То тут не понятно откуда получать имя диска :(
← →
GreatMaster (2005-05-10 10:22) [3]Почему УСБ обязательно?
попробуй: DBT_DEVICEQUERYREMOVE
она даёт: DEV_BROADCAST_HDR
The DEV_BROADCAST_HDR structure contains information about the device affected by a WM_DEVICECHANGE message.
typedef struct _DEV_BROADCAST_HDR {
ULONG dbch_size;
ULONG dbch_devicetype;
ULONG dbch_reserved;
} DEV_BROADCAST_HDR;
typedef DEV_BROADCAST_HDR *PDEV_BROADCAST_HDR;
Members
dbch_size
Size of this structure, in bytes.
dbch_devicetype
Type of device. Can be one of these values:
Value Meaning
DBT_DEVTYP_OEM OEM- or IHV-defined device type.
DBT_DEVTYP_VOLUME Logical volume.
DBT_DEVTYP_PORT Port device (serial or parallel).
← →
VMcL © (2005-05-10 12:08) [4]DeviceIoControl
?
Страницы: 1 вся ветка
Текущий архив: 2005.07.11;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.042 c