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