dein Dings geht nicht zusammen mit 
InitAudioCD()
gibt also wieder nur die Möglichkeit alles neu zu programmieren wie UseAudioCD, EjectAudioCD, AudioCDName ...
Und InitAudioCD, was ja die Anzahl der Laufwerke wieder gibt.
oder
noch eine Idee?
Problem ist, ich wollte es so machen:
Erst ermitteln, welche Laufwerke da sind, die dann schließen, und wenn dein Status STOP liefert ... mit dem Kopieren anfangen.
Da das Schließen vor der STATUS-Prüfung erfolgen muss, muss leider auch InitAudioCD vorher kommen.
Aber wie gesagt, nach InitAudio liefert deine Variante nix mehr.
 
 
   
   
   
Also leider noch nicht der Weißheit letzter Schluss.
Kannst es ja auf PureBasic schieben, was die für'n komisches InitAudioCD gemacht haben 
 
   
TestAufbau:
Code: Alles auswählen
;------- MEIN CODE -------
debug InitAudioCD()
;------- DEIN CODE --------
mopp.MCI_OPEN_PARMS 
mopp\lpstrDeviceType = #MCI_DEVTYPE_CD_AUDIO 
mopp\lpstrElementName = @"D:\" 
mciSendCommand_(0,#MCI_OPEN,#MCI_OPEN_TYPE_ID | #MCI_OPEN_ELEMENT,mopp) 
mstap.MCI_STATUS_PARMS 
mstap\dwItem = #MCI_STATUS_MODE 
mciSendCommand_(mopp\wDeviceID,#MCI_STATUS,#MCI_STATUS_ITEM,mstap) 
Select mstap\dwReturn 
   Case #MCI_MODE_NOT_READY : Debug "#MCI_MODE_NOT_READY" 
   Case #MCI_MODE_PAUSE : Debug "#MCI_MODE_PAUSE" 
   Case #MCI_MODE_PLAY : Debug "#MCI_MODE_PLAY" 
   Case #MCI_MODE_STOP : Debug "#MCI_MODE_STOP" 
   Case #MCI_MODE_OPEN : Debug "#MCI_MODE_OPEN" 
   Case #MCI_MODE_RECORD : Debug "#MCI_MODE_RECORD" 
   Case #MCI_MODE_SEEK : Debug "#MCI_MODE_SEEK" 
EndSelect
>>
Nachtrag
http://www.purebasic.fr/german/viewtopi ... t=laufwerk
  
-----------------------------------------------------------------------
Mit Parameter hätte ich natürlich auch das von Fluid Byte nehmen können
Code: Alles auswählen
; CD subclassing 
; Volker Schmid 
; PureBasic V4 
;- Aenderung fuer CD/DVD-Kopierer ... Folker Linstedt
;/  CDLWState, Kopiert
;/  Fenster auf Invisible
;/  RunProgram fuer Explorer Oeffnung
;/  CD/DVD ... CopyDirectory ... Verzeichnis ueber Parameter
;/  >> Programm kann ueber TaskManger geschlossen werden
 
#MainWin = 0 
#Info = 1 
#Text = 2 
#WM_DEVICECHANGE = $0219 
#DBT_DEVICEARRIVAL = $8000 
#DBT_DEVICEREMOVECOMPLETE = $8004 
#GWL_WNDPROC = -4 
Global OldProc.l 
;/ Variablen fuer Schleife
Global CDLWState.l=0
Global Kopiert.l=0
Procedure.l WndProc(hwnd.l, msg.l, wp.l, lp.l) 
  ; subclass routine 
  If msg.l = #WM_DEVICECHANGE 
    ; devicemessage 
    If wp.l = #DBT_DEVICEARRIVAL 
      ; CD closed 
      ;/ Zur Uebergabe an Abfrage in Schleife
      Debug "drive-state: closed"
      CDLWState=1  
    EndIf 
    If wp.l = #DBT_DEVICEREMOVECOMPLETE 
      ; CD opened 
      ;/ Zur Uebergabe an Abfrage in Schleife
      Debug "drive-state: open" 
      CDLWState=0
      Kopiert=0
    EndIf 
  EndIf 
  
  ; continue with the original routine 
  ProcedureReturn CallWindowProc_(OldProc.l, hwnd.l, msg.l, wp.l, lp.l) 
EndProcedure 
;/
If OpenWindow(#MainWin, 1596, 0, 4, 4, "",#PB_Window_BorderLess | #PB_Window_Invisible) 
  
  ;/ Gadgets unnoetig geworden
  
  ; start subclassing 
  OldProc.l = SetWindowLong_(WindowID(#MainWin), #GWL_WNDPROC, @WndProc()) 
  
  Repeat 
    EventID.l = WaitWindowEvent(500) 
    If EventID.l = #PB_Event_CloseWindow  ; If the user has pressed on the close button 
      Quit.l = 1 
    EndIf 
  
  ;/ ab hier
     Debug "Kopiere " + Str(Kopiert)
     Debug "CDLWState " + Str(CDLWState)
    
     If CDLWState=1
     If Kopiert=0
        RunProgram("C:\WINDOWS\explorer.exe", ProgramParameter(0),"")
        Debug "Kopiere"
        Pfad.s=FormatDate("%yyyy%mm%dd-%hh%ii",Date())
        CopyDirectory(ProgramParameter(0),ProgramParameter(1)+"\"+Pfad+"\", "", #PB_FileSystem_Recursive)
        Kopiert=1
     EndIf
     EndIf 
  ;/ bis hier eingefuegt  
    
  Until Quit.l = 1 
  
  ; stop subclassing 
  SetWindowLong_(WindowID(#MainWin), #GWL_WNDPROC, OldProc.l) 
  
  ; close window 
  CloseWindow(#MainWin) 
  End 
Else 
  ; cant create window 
EndIf