AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Autostart.exe beenden wenn CD ausgeworfen wird
Thema durchsuchen
Ansicht
Themen-Optionen

Autostart.exe beenden wenn CD ausgeworfen wird

Ein Thema von Eagleeye · begonnen am 23. Dez 2011 · letzter Beitrag vom 5. Jan 2012
 
Eagleeye

Registriert seit: 26. Aug 2011
3 Beiträge
 
Delphi XE Professional
 
#1

Autostart.exe beenden wenn CD ausgeworfen wird

  Alt 23. Dez 2011, 15:06
Hallo erstmal allen Nutzern dieses Forums,

ich arbeite grad an einem CD/DVD-Menü für ein Projekt. Es ist auch alles soweit schick und fertig.
Nur wenn die CD/DVD ausgeworfen wird während das Programm noch läuft gibt es folgende Fehlermeldung:

autostart.exe - Kein Datenträger (siehe angehängtes Bild)

Das Programm soll sich schlicht beenden beim CD-Auswurf, aber das tut es erst wenn man einmal die Fehlermeldung weggeklickt hat.

Das merkwürdige ist das die Meldung nur dann auftritt, wenn das Programm von einer echten CD ausgeführt wird.
Bei Ausführung des Programms von einem USB-Stick oder einem virtuellen CD-Laufwerk (Virtual CloneDrive 5.4.5.0) funktioniert es,
d.h. das Programm wird ohne Meldung beendet sobald der Stick abgezogen wird oder wenn das Image unmounted wird.

Ich verwende folgenden Code:
Delphi-Quellcode:
  {$SetPEFlags IMAGE_FILE_EXECUTABLE_IMAGE}
  {$SetPEFlags IMAGE_FILE_NET_RUN_FROM_SWAP}
  {$SetPEFlags IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP}
und

Delphi-Quellcode:
procedure TForm1.WMDeviceChange(var Msg: TMessage);
var
  ptr: PDev_Broadcast_HDR;
  volptr: PDev_Broadcast_Volume;
begin
  try
    if (Msg.WParam = DBT_DEVICEREMOVECOMPLETE) and (Msg.LParam <> 0) then
    begin
      ptr := Pointer(Msg.LParam);
      if ptr.dbch_devicetype = DBT_DEVTYP_VOLUME then
      begin
        volptr := Pointer(ptr);
        if UpperCase(ExtractFileDrive(Application.ExeName))[1] = GetDriveLetter(volptr^.dbcv_unitmask) then
          Application.Terminate;
      end;
    end;
  except
    {$IFDEF DEBUG}
      on E: Exception do
       ShowMessage('Fehler in WMDevicechange: ' + E.Message);
    {$ENDIF}
  end;
end;
Hab ein Testprojekt zusammen gestellt zum Download. Vielleicht hat von euch jemand ne gute Idee wie ich die Fehlermeldung unterdrücken kann.

Ansonsten wünsche ich allen schonmal ein frohes Weihnachtsfest.

MfG Eagleeye
Angehängte Grafiken
Dateityp: png fehler.png (16,1 KB, 17x aufgerufen)
Angehängte Dateien
Dateityp: rar Autostart.rar (1,33 MB, 3x aufgerufen)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:56 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