Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: WinAPI и системное программирование > WM_DEVICECHANGE |
Автор: Dick 21.2.2005, 00:59 | ||
Пример:
вот такой простенький пример в связи с этим вопрос можно ли отследить изменения одного типа устройств ![]() |
Автор: Александра 21.2.2005, 01:47 |
т.е. что за устройство вызвало событие? если так, то в lParam передается указатель на DEV_BROADCAST_HDR, его поле dbch_devicetype необходимо проверять на DBT_DEVTYP_VOLUME, если это так то можно из lParam получить указатель уже на структуру DEV_BROADCAST_VOLUME, где в свою очередь dbcv_flags указывает на изменения или CD или сетевого диска. а имя можно получить уже из поля dbcv_unitmask (структура DEV_BROADCAST_VOLUME), где наличие каждого бита указывает как раз на имя диска. А - 0 бит, B - 1 бит и так далее... Добавлено @ 01:48 спасибо MS за MSDN )) |
Автор: Dick 21.2.2005, 01:55 | ||
спасибо но я уже написал
а теперб вопрос такой, что поставить в константу DBT_DevTyp_Volume, что бы отслеживались изменения Flash Drive ![]() |
Автор: Александра 21.2.2005, 04:08 |
похоже поможет только эксперемент... )) |
Автор: Girder 21.2.2005, 16:30 | ||
![]() Писать самому лень ![]() |
Автор: Dick 21.2.2005, 22:49 | ||||
я уже опух экспериментировать, их там .... очень много ... Добавлено @ 22:49 большое спасибо |
Автор: GRU 15.3.2005, 13:29 |
http://rxlib.ru/faqs/Winapifa.htm Вопрос: Как корректно определить изменения в оборудовании PlugNPlay? Ответ: Пример: type TForm1 = class(TForm) Button1: TButton; private { Private declarations } procedure WMDeviceChange(var Message: TMessage); message WM_DEVICECHANGE; public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} const DBT_DEVICEARRIVAL = $8000; const DBT_DEVICEQUERYREMOVE = $8001; const DBT_DEVICEQUERYREMOVEFAILED = $8002; const DBT_DEVICEREMOVEPENDING = $8003; const DBT_DEVICEREMOVECOMPLETE = $8004; const DBT_DEVICETYPESPECIFIC = $8005; const DBT_CONFIGCHANGED = $0018; procedure TForm1.WMDeviceChange(var Message: TMessage); var s : string; begin {Do Something here} case Message.wParam of DBT_DEVICEARRIVAL : s := 'A device has been inserted and is now available'; DBT_DEVICEQUERYREMOVE: begin s := 'Permission to remove a device is requested'; ShowMessage(s); {True grants premission} Message.Result := integer(true); exit; end; DBT_DEVICEQUERYREMOVEFAILED : s := 'Request to remove a device has been canceled'; DBT_DEVICEREMOVEPENDING : s := 'Device is about to be removed'; DBT_DEVICEREMOVECOMPLETE : s := 'Device has been removed'; DBT_DEVICETYPESPECIFIC : s := 'Device-specific event'; DBT_CONFIGCHANGED : s:= 'Current configuration has changed' else s := 'Unknown Device Message'; end; ShowMessage(s); inherited; end; |