Seite 2 von 4

Verfasst: 17.12.2006 19:43
von Fluid Byte
CSprengel hat geschrieben:Hmmm, gibt es irgendeine Möglichkeit, mit der man feststellen kann ob ein Laufwerk geöffnet/geschlossen wurde? Ich nehm mal an, über Winapi?

Code: Alles auswählen

mopp.MCI_OPEN_PARMS
mopp\lpstrDeviceType = #MCI_DEVTYPE_CD_AUDIO
mopp\lpstrElementName = @"F:"
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

Verfasst: 18.12.2006 11:47
von Xaby
geht leider nicht.

Debugt bei mir immer: #MCI_MODE_OPEN.

War auch so schlau, oben wo F:\ steht, den Pfad meines Disc-Laufwerks anzugeben.

Ist wohl noch nicht das Gelbe vom Ei oder fehlt da noch was?
Nein, ganz so schlimm ist es nicht.

Wenn eine CD im Laufwerk ist und es eine Datendisc ist. bekomme ich
#MCI_MODE_STOP

Und das reicht ja auch schon fast. So weiß man zwar nicht, ob es eingefahren oder ausgefahren ist. Aber man kann sagen, wann man auf die CD zugreifen kann.

Bin immer erfreut, von dir zu lesen Fluid Byte. :allright:

Verfasst: 18.12.2006 18:12
von Fluid Byte
Geht leider nicht.

Debugt bei mir immer: #MCI_MODE_OPEN.
Immer? Sollte nur kommen wenn die Schublade deines CD Laufwerks geöffnet ist.
War auch so schlau, oben wo F:\ steht, den Pfad meines Disc-Laufwerks anzugeben.
Dir kann man halt nix vormachen! :mrgreen:
Wenn eine CD im Laufwerk ist und es eine Datendisc ist. bekomme ich #MCI_MODE_STOP
Macht Sinn da man eine Daten CD nicht abspielen kann sofern es sich um eine Spiele CD mit Musik handelt. Denn wie du vielleicht bemerkt hast ist der geöffnete Gerätetyp #MCI_DEVTYPE_CD_AUDIO.

Ich guck' mal ob es noch nen' anderen Modus zum checken gibt.
Und das reicht ja auch schon fast. So weiß man zwar nicht, ob es eingefahren oder ausgefahren ist. Aber man kann sagen, wann man auf die CD zugreifen kann.
Eigentlich schon. Unabhängig davon um was für einen CD-Typ es sich handelt solltest du #MCI_MODE_OPEN bekommen wenn das Laufwerk offen ist.
Bin immer erfreut, von dir zu lesen Fluid Byte.
Na das ist doch dufte! Jetzt hab ich ja auch bald Urlaub und kann mir deinen "Kram" noch mal genauer angucken :wink:

Mal was ganz trauriges

Verfasst: 18.12.2006 23:48
von Xaby
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.

:cry: >_< /:-> :bluescreen:

Also leider noch nicht der Weißheit letzter Schluss.

Kannst es ja auf PureBasic schieben, was die für'n komisches InitAudioCD gemacht haben :mrgreen: :allright:


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

:allright:

-----------------------------------------------------------------------

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

Verfasst: 19.12.2006 14:55
von Xaby
-------------------------------------------------------------------------------------
Woher wissen die anderen, dass sich hier was geändert hat, wenn ich es EDITIERE?

Die Zeit ändert sich nicht und dann wird auch niemand nachsehen oder?
Ist das Problem, wenn es der letzte Beitrag ist. /:->
-------------------------------------------------------------------------------------

Verfasst: 19.12.2006 15:41
von Kaeru Gaman
dieses problem kannst du folgendermaßen umgehen:

geh ins edit deines letzten beitrags, markiere den gesamten text und
kopiere ihn in die zwischenablage.

geh "zurück" im browser, drück das [X] an deinem Beitrag um ihn zu löschen.

dann drückst du auf "neue antwort schreiben", fügst den alten beitrag aus der zwischenablage ein,
und editierst wie du zuvor wolltest.

wenn du das dann abschickst, wird es den anderen forenusern als "neuer beitrag" angezeigt,
sie bekommen also ein zeichen mal nachzusehen, und du hast keinen doppelpost produziert. ;) :allright:

Gleichzeitiger Zugriff zweier Programme auf DVD/CD

Verfasst: 16.01.2007 14:55
von Xaby
Gleichzeitiger Zugriff zweier Programme auf eine Scheibe.
DVD oder CD.

Beispiel:

Ich hab eine Film-DVD und will den Film auf Festplatte kopieren,
kann es aber nicht abwarten und will den Film gleichzeitig schauen.

Das gleiche kann ich mir mit Bilder-CDs/DVDs vorstellen.
Einige will man sich schon vorher mal ansehen, aber eigentlich will man doch alle auf der eigenen Platte haben.

Problem ist, dass der Film im oben genannten Beispiel stockt und das Kopieren ne Stunde dauert.

Im unteren Beispiel braucht der Bildbetrachter für jedes Bild zehn Sekunden zum Anzeigen und das Kopieren dauert auch Ewig.


Ich suche eine Möglichkeit, wie man es so realisieren kann, dass beides zusammen möglich ist und die ganze Sache sagen wir
das Kopieren an sich ~ 10 Minuten maximal dauert.
Weniger wäre besser.

Kann man irgendwo IDE, Atapi, DMA ... was weiß ich Einstellungen ändern, um bestmöglichen Zugriff zu haben?

Es handelt sich hier um 16x DVD-RAM Brenner von LG
als Alternative hab ich ein NEC irgendwas 8x DVD-RAM Leser.

beide brauchen leider für das bloße Kopieren eines gut gebrannten DVD-Rohlings 13-16 Minuten.
Beide hängen an einem IDE (ich hab nur einen)

Ich hab das NEC mal deaktiviert, da konnte ich die DVD sogar in 11 Minuten kopieren.

Aber Zugriff mit zweiter Aplikation zusätzlich ... >_<


Helft ihr mir, kann man mir noch helfen? :praise:

Verfasst: 16.01.2007 15:19
von AND51
Ich glaube, das Laufwerk entscheidet selbst, wo es seinen Lesekopf hinschiebt, und nicht du.

Was du machen kannst ist:
> Im unteren Beispiel braucht der Bildbetrachter für jedes Bild zehn Sekunden zum Anzeigen und das Kopieren dauert auch Ewig.
Bild temporär in RAM oder Temp-Verzeichnis zwischenspeichern und anzeigen.

> Problem ist, dass der Film im oben genannten Beispiel stockt und das Kopieren ne Stunde dauert.
kopieren würde hier zu lang dauern. Also müsstest du den Film als eine Art "Stram" öffnen, dann kopieren; während der Film angezeigt wird, wird gleichzeitig der Film gespeichert.

Verfasst: 16.01.2007 15:28
von Tafkadasom2k5
AND51 hat geschrieben:"Stram" öffnen, dann kopieren; während der Film angezeigt wird, wird gleichzeitig der Film gespeichert.
WÜrde aber durch die Codecs, die recht rechenintensiv sind, wieder runtergezogen werden.Ich glaube kaum, dass dieses Vorhaben zu realisieren ist.

Bei Bildern wäre das was Anderes...

Verfasst: 17.01.2007 03:27
von Xaby
Gern weitere Lösungsvorschläge.

Ideal wäre, wenn es für alle Arten von Daten geht. Also ich weder einen VideoPlayer noch einen Bildbetrachter neu erfinden müsste.

Dank euch, wir haben doch sicherlich schlaue Füchse, die da was kennen, ein Tool oder eine versteckte Einstellung oder eine Art Zwischentreiber.

Die Sache mit dem Temp-Ordner bei Bilder klappt ja nur bedingt.
Woher soll ein vorhandener Bildbetrachter, der zuerst eine Liste aller vorhandenen Bilder im angegebenen Ordner macht, wissen, dass noch welche hinzugekommen sind?

Es geht schon drum, dass man es nicht merkt.

Also so als wäre es von der Festplatte. Ohne (oder mit leichten zeitlichen, kaum spürbaren, weil CD/DVD) Einschränken.

:roll: