Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.032 c
3-1116925223
Starcom
2005-05-24 13:00
2005.07.11
Прогу с БД на чистую Машину!


4-1115814772
Неуловимый Джо
2005-05-11 16:32
2005.07.11
API к perfmon


4-1116082031
TForm1
2005-05-14 18:47
2005.07.11
Запуск внутри...


8-1106649051
Son
2005-01-25 13:30
2005.07.11
Координаты картинки в TImage


14-1118311520
grvakh
2005-06-09 14:05
2005.07.11
Ошибка при помещении компонента на форму