Entwickler-Ecke

Windows API - DBT_DEVICEQUERYREMOVE wird nie ausgelöst


Overdosed - Mi 17.08.05 14:26
Titel: DBT_DEVICEQUERYREMOVE wird nie ausgelöst
Hallo !

Ich versuche per WM_DEVICECHANGE herauszufinden, ob ein bestimmtes USB-Gerät entfernt wird/wurde.
Dazu prüfe ich den WParam auf DBT_DEVICEQUERYREMOVE, nur leider kommt dieses Ereignis nie an.
Die zwei die ich bekomme sind DBT_DEVICEARRIVAL und DBT_DEVICEREMOVECOMPLETE.
Kann mir einer erklären, warum ?


Verarbeitung bei WM_DEVICECHANGE:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
    case Msg.wParam of
      DBT_DEVICEQUERYREMOVE:
      begin
        if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = DBT_DevTyp_Volume then
        begin
          Drive := GetDrive(PDevBroadcastVolume(Msg.lParam));
          if Drive = strProgrammDriveLetter then
          begin
            bolClose := True;
            Application.Terminate;
          end;
        end;
      end;
    end;


Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.


Overdosed - Fr 19.08.05 00:10

Ok, nach langem Suchen endlich was gefunden.
Damit die Nächsten nicht den gleichen Stress haben wie ich, sollte man sich mal den Toolbox-Artikel zu Gemüte führen:
http://www.toolbox-mag.de/data/tx22005artikel1.pdf

Zitat:
Es hängt wohl
davon ab, wieviel Lust die Treiberentwickler haben, die
Vorgaben von Microsoft zu implementieren.


Schade !

Gruss, Perry