Как да разберете от 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)