Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как определить Flash диск в системе ? [D6, WinXP]


dreamse ©   (2005-05-10 09:35:00) 

В смысле отличить его от обычного жесткого диска ?

Функция :

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

Может кто нибудь знает стандартное решение проверки ?


VMcL   (2005-05-10 12:08:00) [1]

DeviceIoControl
?


GreatMaster   (2005-05-10 10:22:00) [2]

Почему УСБ обязательно?

попробуй:  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).


dreamse   (2005-05-10 10:16:00) [3]

> 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:10:00) [4]

1. А ты точно вместо "С:\" указывал чё надо?
2. Пробовал ли на СД и др.? Вдруг ваще не работает?
3. Секи размер. Если меньше 1Гб - это флэш :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо