Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.045 c
2-1154996217
Василич
2006-08-08 04:16
2006.08.27
Очистить БД через запрос SQL


2-1155113001
Хам
2006-08-09 12:43
2006.08.27
Работа с ini файлами


2-1154665343
MSVN
2006-08-04 08:22
2006.08.27
TrackBar и время


15-1154367133
ALEXD31
2006-07-31 21:32
2006.08.27
VmWare workstation 5.5


15-1152028348
Fl@sh
2006-07-04 19:52
2006.08.27
pointer s :(((





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский