DEV_BROADCAST_HDR wird nicht bei SendMessage verwendet!
Oh, OK ... das hatte ich irgendwie falsch verstanden.
Z: hat die ID 25, da A = ID 0 ist..
Dann ist 4 = D: in deinem Beispiel vorhin aber auch falsch.
Scheinbar knallts aber bei jeder Zuweisung der Werte von pvol:
Code:
Access violation at address 0053CFAD in module 'disconnect.exe'. Write of address 00000000.
Muss das irgendwie noch initialisiert werden? pvol ist erstmal nur nil.
Edit:
Also so bekomme ich die Funktion zum Laufen:
Delphi-Quellcode:
var
pvol: PDevBroadcastVolume;
sDrive: String;
const
DBT_DEVICEREMOVECOMPLETE = 32772;
DBTF_NET = 2;
EmptyDevBroadcastVolume: TDevBroadcastVolume = (
dbcv_size: 0;
dbcv_devicetype: 0;
dbcv_reserved: 0;
dbcv_unitmask: 0;
dbcv_flags: 0);
begin
sDrive := 'Z:';
pvol := @EmptyDevBroadcastVolume;
pvol.dbcv_size := SizeOf(DEV_BROADCAST_VOLUME);
pvol.dbcv_devicetype := DBT_DEVTYP_VOLUME;
pvol.dbcv_unitmask := PathGetDriveNumber(PChar(sDrive))
pvol.dbcv_flags := DBTF_NET;
SendMessage(HWND_BROADCAST, WM_DEVICECHANGE, DBT_DEVICEREMOVECOMPLETE, INTEGER(@pvol));
Einen Unterschied scheint es aber dennoch nicht zu machen. Das Laufwerk ist immer noch da.