Форум: "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.061 c