Hallo Matze,
in meinem Programm SystemInfo benutze ich diese Procedure um auf das Verbinden/Trennen eines USB-Laufwerks zu reagieren :
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
//
// Die Daten zu den physikalischen Laufwerken aktualisieren, wenn ein USB
// Gerät angeschlossen oder getrennt wird.
//
procedure TMainForm.WMDeviceChange(var Msg: TMessage);
type
PDevBroadcastHdr = ^TDevBroadcastHdr;
TDevBroadcastHdr = packed record
dbcd_size, dbcd_devicetype, dbcd_reserved: DWORD;
end;
PDevBroadcastVolume = ^TDevBroadcastVolume;
TDevBroadcastVolume = packed record
dbcv_size, dbcv_devicetype, dbcv_reserved, dbcv_unitmask: DWORD;
dbcv_flags: Word;
end;
function GetDrive(pDBVol: PDevBroadcastVolume): string;
var
i: Byte; Maske: DWORD;
begin
if (pDBVol^.dbcv_flags and $0001) = $0001 then
begin
Maske := pDBVol^.dbcv_unitmask;
for i := 0 to 25 do
begin
if (Maske and 1) = 1 then
Result := Char(i + Ord('A')) + ': ';
Maske := Maske shr 1;
end;
end;
end;
begin
case Msg.wParam of
$8000:
if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = $0002 then
begin
// ToDo something
end;
$8004:
if PDevBroadcastHdr(Msg.lParam)^.dbcd_devicetype = $0002 then
begin
// ToDo something
end;
end;
end;
Ich nehme mal an, dass es dafür auch eine Message gibt um ein Laufwerk zu trennen. Vielleicht kannst Du ja damit was anfangen.