Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Benachrichtigug beim einlegen einer CD (https://www.delphipraxis.net/55173-benachrichtigug-beim-einlegen-einer-cd.html)

geisi 17. Okt 2005 17:35


Benachrichtigug beim einlegen einer CD
 
ich beziehe meine daten aus einem bestimmten grund von einer cd. wenn die cd aber nicht eingelegt ist, gebe ich eine meldung aus. ich möchte, aber dass mein programm benachrichtigt wird, wenn eine cd eingelegt wurde.

funktioniert das? oder muss ich mit einem timer die ganze zeit abfragen ob eine cd eingelegt wurde?

geisi 17. Okt 2005 18:37

Re: Benachrichtigug beim einlegen einer CD
 
geht das mit usb-sticks?

geisi 17. Okt 2005 19:53

Re: Benachrichtigug beim einlegen einer CD
 
gibt es irgendeinen anderen weg, als die ständige abfrage in einem timer?

BenjaminH 17. Okt 2005 19:54

Re: Benachrichtigug beim einlegen einer CD
 
Bitte hör auf zu Pushen und benutze die Forensuche, ich bin mir sicher, dass es das schon gab!!

geisi 23. Okt 2005 15:38

Re: Benachrichtigug beim einlegen einer CD
 
kann mir hier keiner einen tipp geben?

Van HelF 24. Okt 2005 13:46

Re: Benachrichtigug beim einlegen einer CD
 
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:='A' to 'Z' do
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.

geisi 24. Okt 2005 19:16

Re: Benachrichtigug beim einlegen einer CD
 
Danke! Danke! Danke!

Dachte schon, mir antwortet keiner mehr! Vielen Dank! Werde es gleich ausprobieren!
Hätte nur gern gewusst, ob man das auf usb-sticks auch anwenden kann!

mfg geisi

Stanlay Hanks 24. Okt 2005 20:09

Re: Benachrichtigug beim einlegen einer CD
 
MSDN sagt zu dem Thema:

Zitat:

Zitat von MSDN
he WM_DEVICECHANGE device message notifies an application of a change to the hardware configuration of a device or the computer.

Die Message wird also auch gesendet, wenn du einen USB Stick einsteckst, weil das ja "a change to the hardware configuration of a device" ist.

Man liest sich, Stanlay :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz