Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.27;
Скачать: CL | DM;

Вниз

Как из Делфи узнать, что к компу подключена флэшка?   Найти похожие ветки 

 
Zhekacoder   (2006-05-03 12:16) [0]

Каким образом можно программно узнать, что к компу подключена флэшка?


 
Deka ©   (2006-05-03 13:42) [1]

Отловить сообщение об изменении логических дисков. По крайней в этой стороне надо искать.


 
n0name   (2006-05-03 13:52) [2]

http://delphimaster.net/view/4-1145187125/


 
begin...end ©   (2006-05-03 13:54) [3]

WM_DEVICECHANGE ?


 
Zhekacoder   (2006-05-04 11:41) [4]

Приведите плиз рабочий код, Deka, я это и пытаюсь сделать :-)


 
Deka ©   (2006-05-04 14:42) [5]

Я работаю с фотоаппаратами. Управляю ими польностью с компьютера. Управление идёт по USB. Мне необходимо было отлавливать момент подключения/отключения фотоаппаратов к компу. При подключении/отключении фотоаппарата в системе появляется/исчезает логический диск соотвествующий памяти фотоаппарата. Вот такой код отлавливает нужный мне момент:

procedure TTimerForm.WMDeviceChange(var aMessage: TMessage);
type
 PDevBroadcastHdr = ^DEV_BROADCAST_HDR;
 DEV_BROADCAST_HDR = packed record
   dbch_size: DWORD;
   dbch_devicetype: DWORD;
   dbch_reserved: DWORD;
 end;

const
 DBT_DEVICEARRIVAL = $8000;
 DBT_DEVICEQUERYREMOVE = $8001;
 DBT_DEVICEREMOVECOMPLETE = $8004;
 DBT_DEVTYP_VOLUME = $00000002;  // Новый логический том

var
 devType: DWORD;
 
begin
 // В системе появилось новое устройство.
 // Подключение фотоаппарата ВСЕГДА сопровождается появлением в системе
 // нового логического диска. Поэтому именно это уведомление ключевое!
 inherited;
 
 Case aMessage.wParam of

   DBT_DEVICEARRIVAL: begin  // Новое устройство готово к работе
     devType:= PDevBroadcastHdr(aMessage.LParam)^.dbch_devicetype;
     If devType = DBT_DEVTYP_VOLUME then begin
       PostMessage(TimerForm.Handle, UM_ScanDevice, 0, 0);
     end;
   end;

   DBT_DEVICEREMOVECOMPLETE: begin  // Устройство удалено из системы
     devType:= PDevBroadcastHdr(aMessage.LParam)^.dbch_devicetype;
     If devType = DBT_DEVTYP_VOLUME then begin
       PostMessage(TimerForm.Handle, UM_ScanDevice, 0, 0);
     end;
   end;

   DBT_DEVICEQUERYREMOVE: begin  // Устройство скоро будет удалено
     devType:= PDevBroadcastHdr(aMessage.LParam)^.dbch_devicetype;
     If devType = DBT_DEVTYP_VOLUME then begin
       PostMessage(TimerForm.Handle, UM_ScanDevice, 0, 0);
     end;
   end;
 end;
end;

Когда разбирался с этим нашел несколько примеров. В том числе и с регистрацией "ловушки" (получателя уведомлений?) для такого рода событий, но не разобрался зачем он нужен, если и без него работает. Выкинул его и довольствуюсь тем, что написано. В принципе пока работает. Возможно что-то кривовато и кто-то поправит.


 
krid24 ©   (2006-05-04 14:43) [6]

Zhekacoder , в DDK есть пример, который отлавливает подключение/отключение USB устройств. Лежит в NTDDK\SRC\WDM\USB\USBVIEW (или в аналогичных ветках для других DDK)


 
Deka ©   (2006-05-04 14:53) [7]

Возможно в системе может появиться новый логический диск который не будет соотвествовать вставленной флешке. Мне то это все равно, потому-что при появлении диска я просто пересчитываю подключенные к компу фотоаппараты, а вот как гарантировать то, что подключилась именно флешка я не знаю. Возможно можно попробовать прочитать какие-то характеристики каждого логического диска и по ним определиться. Т.е. вместо процедуры сканирования новых фотоаппаратов применить процедуру сканирования дисков с заданными характеристиками. И еще где-то на форуме уже была похожая тема...
И вот ещё...
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=20674



Страницы: 1 вся ветка

Текущий архив: 2006.08.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
4-1146898671
tower
2006-05-06 10:57
2006.08.27
Добавить системного пользователя.


2-1154599051
oleolay
2006-08-03 13:57
2006.08.27
обращение к элементам TFrame из родительской формы


4-1146872104
Nostradamus
2006-05-06 03:35
2006.08.27
Named Pipes


4-1146775675
<X>
2006-05-05 00:47
2006.08.27
Работа со шрифтами средствами WinApi


5-1138281758
ronyn
2006-01-26 16:22
2006.08.27
Встроеное контекстное меню