Как да разберете от Delphi, че флашка е свързана към компютъра
Как мога програмно да разбера, че флашка е свързана към компютъра?
Хванете съобщение за промяна на логическите устройства. Поне в тази посока трябва да се търси.
Моля, предоставете работещ код, Дека, това се опитвам да направя :-)
Работя с камери. Управлявам ги изцяло от моя компютър. Управлението е през USB. Трябваше да уловя момента на свързване / изключване на камери към компютъра. Когато камерата е свързана/прекъсната, в системата се появява/изчезва логическо устройство, съответстващо на паметта на камерата. Ето кода, който улавя момента, от който се нуждая: procedure TTimerForm.WMDeviceChange(var aMessage: TMessage); type PDevBroadcastHdr = ^DEV_BROADCAST_HDR; DEV_BROADCAST_HDR = опакован запис dbch_size: DWORD; dbch_devicetype: DWORD; dbch_reserved: DWORD; край;
const DBT_DEVICEARRIVAL = $8000; DBT_DEVICEQUERYREMOVE = $8001; DBT_DEVICEREMOVECOMPLETE = $8004; DBT_DEVTYP_VOLUME = $00000002; // Нов логически том
var devType: DWORD;
begin // В системата се появи ново устройство. // Свързването на камера ВИНАГИ е придружено от появата на // нов логически диск в системата. Следователно това известие е ключово! наследени;
Случай aMessage.wParam на
DBT_DEVICEARRIVAL: начало // Новото устройство е готово за работа devType:= PDevBroadcastHdr(aMessage.LParam)^.dbch_devicetype; Ако devType = DBT_DEVTYP_VOLUME тогава започнете PostMessage(TimerForm.Handle, UM_ScanDevice, 0, 0); край; край;
DBT_DEVICEREMOVECOMPLETE: начало // Устройството е премахнато от системата devType:= PDevBroadcastHdr(aMessage.LParam)^.dbch_devicetype; Ако devType = DBT_DEVTYP_VOLUME тогава започнете PostMessage(TimerForm.Handle, UM_ScanDevice, 0, 0); край; край;
DBT_DEVICEQUERYREMOVE: начало // Устройството ще бъде премахнато скоро devType:= PDevBroadcastHdr(aMessage.LParam)^.dbch_devicetype; Ако devType = DBT_DEVTYP_VOLUME тогава започнете PostMessage(TimerForm.Handle, UM_ScanDevice, 0, 0); край; край; край; край; Докато разглеждах това, намерих няколко примера. Включително с регистрацията на "капан" (получател на известия?) За такива събития, но не разбрах защо е необходим, ако работи без него. Изхвърлих го и съм доволен от написаното. По принцип все още работи. Може би нещо е криво и някой ще го коригира.
Zhekacoder, има пример в DDK, който хваща свързване/изключване на USB устройства. Намира се вNTDDK\SRC\WDM\USB\USBVIEW(или подобни клонове за други DDK)