![]() |
Kein WParam in WM_DEVICECHANGE bei bestimmter Hardware
Hallo,
ich versuche meine Digitalkamera automatisch erkennen zu lassen (via WM_DEVICECHANGE9 und ggfs. die fotos in einen ordner kopieren zu lassen. Das Programm funktioniert sehr gut mit allen Medien die im Arbeitsplatz mit einem Laufwerksbuchstaben gemountet werden. Manche Digital-Kameras werden dagegen als virtuelles Laufwerk gemountet. (z.B. Canon Powershot S45), zu erkennen an dem kleinem Kamera-Icon was beim anschließen erscheint. Komischerweise ist dann der Parameter wParam leer und lParam enthält keinen Pointer auf nähere Informationen. Ich bin mittlerweile ein wenig verzweifelt, da ich jetzt 3 Tage das Internet durchsuche und jetzt im 3. großen Delphi-Forum poste, da ich bisher nicht eine einzige Antwort bekommen habe. Vielleicht finde ich den Experten.. Grüße Sebastian
Code:
this one uses the same variable names for the Message-Struct like described in the API-Reference:
procedure TForm1.WMDEVICECHANGE(var Msg: TMsg); var MsgType: String; Filter: PDevBroadcastVolume; lpdb: PDEVBROADCASTHDR; Volume: String; begin lpdb := PDEVBROADCASTHDR(Msg.lParam); if assigned(lpdb) then begin case lpdb^.dbch_devicetype of DBT_DEVTYP_OEM: MsgType := 'OEM- or IHV-defined'; DBT_DEVTYP_DEVNODE: MsgType := 'Devnode number'; DBT_DEVTYP_VOLUME: MsgType := 'Logical volume'; DBT_DEVTYP_PORT: MsgType := 'Port (serial or parallel'; DBT_DEVTYP_NET: MsgType := 'Network resource'; DBT_DEVTYP_DEVICEINTERFACE: MsgType := 'DEVTYP_DEVICEINTERFACE'; DBT_DEVTYP_HANDLE: MsgType := 'DEVTYP_HANDLE'; DBT_DEVNODES_CHANGED: MsgType := 'DBT_DEVNODES_CHANGED'; else MsgType := 'Unkown DeviceType' + IntToStr(lpdb^.dbch_devicetype); end; end; Memo1.Lines.Add(MsgType); case Msg.wParam of DBT_DEVICEARRIVAL: MsgType := 'DBT_DEVICEARRIVAL'; DBT_DEVICEQUERYREMOVE: MsgType := 'DBT_DEVICEQUERYREMOVE'; DBT_DEVICEQUERYREMOVEFAILED: MsgType := 'DBT_DEVICEQUERYREMOVEFAILED'; DBT_DEVICEREMOVEPENDING: MsgType := 'DBT_DEVICEREMOVEPENDING'; DBT_DEVICEREMOVECOMPLETE: MsgType := 'DBT_DEVICEREMOVECOMPLETE'; DBT_DEVICETYPESPECIFIC: MsgType := 'DBT_DEVICETYPESPECIFIC'; DBT_CONFIGCHANGED: MsgType := 'DBT_CONFIGCHANGED'; else MsgType := 'Unknown event ' + IntToHex(Msg.wParam, 0); end; Memo1.Lines.Add('Msg: ' + IntToStr(Msg.message)); Memo1.Lines.Add('Event: ' + IntToStr(Msg.wParam)); Memo1.Lines.Add('Result: ' + IntToStr(Msg.lParam)); if Msg.lParam > 0 then begin Filter:= @Msg.lParam; Volume:= DetermineVolume(Filter^.dbcv_unitmask); MsgType := MsgType + ' ' + Volume + ' '+ IntToSTr(Filter^.dbcv_flags); Memo1.Lines.Add(MsgType); end; if Msg.wParam = DBT_DEVICEARRIVAL then begin //do something end; end; |
Re: Kein WParam in WM_DEVICECHANGE bei bestimmter Hardware
Korrekte Antwort wäre gewesen: RegisterDeviceNotification vorher auszuführen. Dann bekommt man wenigstens mit, dass die Kamera sich als DeviceInterface anmeldet..
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz