Delphi-Quellcode:
const
DBT_DEVICEREMOVECOMPLETE = 32772;
DBTF_NET = 2;
var
pvol: PDevBroadcastVolume;
begin
pvol.dbcv_size := SizeOf(DEV_BROADCAST_VOLUME);
pvol.dbcv_devicetype := DBT_DEVTYP_VOLUME;
pvol.dbcv_unitmask := 26; //Z:
pvol.dbcv_flags := DBTF_NET;
SendMessage(HWND_BROADCAST, WM_DEVICECHANGE, DBT_DEVICEREMOVECOMPLETE, INTEGER(@pvol));
DEV_BROADCAST_HDR wird nicht bei SendMessage verwendet!
Nur, wenn Du die Message selber erhälst und wissen willst, auf was für ein Record lParam zeigt.
Da alle DevBroadcast Records mit den gleichen Feldern anfangen wie DEV_BROADCAST_HDR, kannst Du dann den Typ auslesen um dann mit dem richtigen Typ (z.B. DEV_BROADCAST_VOLUME) zu casten und weiter zu arbeiten.
Wenn es nicht Records währen, sondern Objecte, dann währe DEV_BROADCAST_VOLUME von DEV_BROADCAST_HDR abgeleitet.
Ach ja
pvol.dbcv_unitmask := 26; //Z:
ist falsch, Z: hat die ID 25, da A = ID 0 ist..
OK auch falsch...
Hier wird eine Bitmaske gebraucht.. $02000000 = Z