CD-Laufwerk wurde geöffnet?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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:
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Mal was ganz trauriges

Beitrag 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
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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. /:->
-------------------------------------------------------------------------------------
Kinder an die Macht http://scratch.mit.edu/
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Gleichzeitiger Zugriff zweier Programme auf DVD/CD

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag 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...
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Antworten