Einzelnen Beitrag anzeigen

Van HelF

Registriert seit: 24. Okt 2005
Ort: Karlsbrunn
195 Beiträge
 
Delphi 7 Personal
 
#6

Re: Benachrichtigug beim einlegen einer CD

  Alt 24. Okt 2005, 14:46
Wer sucht der findet:

Wenn eine CD ins Laufwerk einlegt oder eine CD herausgenommen wird, wird die Botschaft WM_DeviceChange an alle Anwendungen geschickt.
Über den Parameter WParam kann bestimmt werden welche Aktion durchgeführt wurde. Die Botschaft wird nur verschickt, wenn die 'Automatische Benachrichtigung bei Wechsel' aktiv ist.

In dem Botschaftsrecord sind weitere Informationen zum Datenträger-Wechsel enthalten. So lässt sich über die Variable "lpdbv.dbcv_unitmask" ermitteln, auf welches Laufwerk sich der Wechsel bezieht.

Delphi-Quellcode:
private
 procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;

function GetFirstDrive(UnitMask: DWORD): Char;
var
I: Char;
begin
Result:=#0;
for I:='Ato 'Zdo
begin
  if (UnitMask and 1) = 1 then
  begin
    Result:=I;
    break;
  end;
  UnitMask:=UnitMask Shr 1;
end;
end;

procedure TForm1.WMDeviceChange(var Msg: TMessage);
var
lpdb: PDevBroadcastHdr;
lpdbv: PDevBroadcastVolume;
begin
lpdb:=PDevBroadcastHdr(Msg.lParam);
case Msg.wParam of
  //Datenträger eingelegt
  DBT_DeviceArrival:
    //Prüfen, ob es sich um eine DVD oder CD handelt.
    if lpdb^.dbch_devicetype = DBT_DevTyp_Volume then
    begin
      lpdbv:=PDevBroadcastVolume(Msg.lParam);
      if lpdbv.dbcv_flags = DBTF_Media then
        Label1.Caption:=Format('Datenträger in Laufwerk %s eingelegt.',
                               [GetFirstDrive(lpdbv.dbcv_unitmask)]);
    end;
  //Datenträger entfernt
  DBT_DeviceRemoveComplete:
    //Prüfen, ob es sich um eine DVD oder CD handelt.
    if lpdb^.dbch_devicetype = DBT_DevTyp_Volume then
    begin
      lpdbv:=PDevBroadcastVolume(Msg.lParam);
      if lpdbv.dbcv_flags = DBTF_Media then
        Label1.Caption:=Format('Datenträger aus Laufwerk %s entfernt.',
                               [GetFirstDrive(lpdbv.dbcv_unitmask)]);
    end;

end; //case
end;
Da brauchst du auch keine timer dafür.
  Mit Zitat antworten Zitat