// Der folgende Code reagiert auf das Einlegen und Entfernen einer CD (DVD).
// Dabei muss man beachten, dass manche Laufwerke beim Schließen immer
// melden, dass sie bereit sind, auch wenn keine CD eingelegt wurde. Siehe
// dazu
prüfen, ob eine Diskette im Laufwerk ist

// Getestet mit D4 unter XP

... 
  private 
    { Private-Deklarationen } 
  public 
    procedure WMDC(var Msg: TMessage); message WM_DEVICECHANGE; 
  end; 
 
var 
  Form1: TForm1; 
 
implementation 
 
{$R *.DFM} 
 
type 
  PDBCV = ^_DevBroadcastVolume; 
  _DevBroadcastVolume = record 
    dbcv_size, dbcv_devicetype, dbcv_reserved, dbcv_unitmask: cardinal; 
    dbcv_flags: word; 
  end; 
 
function LW(Vol: PDBCV): char; 
var 
  i: Byte; 
  m: cardinal; 
begin 
  result := #0; 
  if Vol.dbcv_devicetype = 2 then 
    if odd(Vol^.dbcv_flags) then begin 
      m := Vol^.dbcv_unitmask; 
      for i := 0 to 25 do begin 
        if odd(m) then begin 
          result := Char(i + 65); 
          break; 
        end; 
        m := m shr 1; 
      end; 
    end; 
end; 
 
procedure TForm1.WMDC(var Msg: TMessage); 
var 
  c: char; 
begin 
  c := LW(PDBCV(Msg.lParam)); 
  if c <> #0 then 
    case Msg.wParam of 
      $8000: label1.Caption := 
        'Laufwerk ' + c + ': ist jetzt verfügbar.'; 
      $8004: label1.Caption := 
        'Laufwerk ' + c + ': ist nicht mehr verfügbar.'; 
    end; 
end;



Zugriffe seit 6.9.2001 auf Delphi-Ecke