# CD-Laufwerk öffnen bzw. schließen



## bernd (7. Okt 2004)

Morgen,
Gibt es einen Befehl mit dem man das CD, bzw. DVD-Laufwerk öffnen und schließen kann?
 ???:L


----------



## Beni (7. Okt 2004)

Jedenfalls nicht in der Standartbibliothek.

Aber dank google fand ich zumindest das hier.


----------



## thE_29 (7. Okt 2004)

also ich würds mit jni machen!
wenn du willst kann ich dir die dll Datei dafür erstellen


----------



## bernd (7. Okt 2004)

Gerne, freu!
Danke


----------



## thE_29 (7. Okt 2004)

```
class cdromhandler {

      private native void openCDRom(int iLaufwerk);
      private native void closeCDRom(int iLaufwerk);

      public static void main ( String [ ] args ) {
          new cdromhandler().openCDRom(0);
          new cdromhandler().closeCDRom(0);
      }
      static {

            System.loadLibrary ( "cdromhandler" ) ;
      }
}
```

http://www.public.asu.edu/~wjanjua/java/jni/
du brauchst halt den c code net erstellen 
Sollte aber mit nem GUI Compiler einfach mittels dem system.loadlibary (wenn sie im gleichen verz liegt) auch gehn!

http://www.java-forum.org/codeschnipsel-u-projekte/21831-cd-rom-handler-dll-fuer-windows.html das ist die dll
achja, ob die Klasse so heißen muss oder nicht weiß ich net, nenn sie halt mal so 

wenns den C Code willst, sag bescheid!


----------



## meez (7. Okt 2004)

Ehrlich gesagt würde ich dir davon abraten...
JNI sollte wirklich nur gebraucht werden, wenn etwas mit Java nicht zu erreichen ist, und unbedingt benötigt wird...
Das öffnen eines CD-Roms mit JNI ist gelinde gesagt "idiotisch", da du dir damit das ganze Java-Program kaputtmachst.. :noe:


----------



## thE_29 (7. Okt 2004)

wieso 

wenn du es nur in windows laufen lassen willst und vorher ne abfrage machst ob die dll existiert und ob es windows ist und dann erst die cd laufwerke aufmachen lassen willst, seh ich kein prob drinnen!

java ist zwar plattformunabhängig, aber die meisten nutzen das sowieso net, also ist ein java programm nicht gleich kaputt nur weil es unter linux/mac nicht mehr läuft!


----------



## meez (7. Okt 2004)

Dann aber gleich direkt ein C Progi draus machen...Oder Java auch gleich Native übersetzten...


----------



## bernd (7. Okt 2004)

Vielen Dank, ich denke ausprobieren schadet nicht,
und auf meinem Rechner läuft eh Windows.


----------



## meez (7. Okt 2004)

Ach ja....
Kann man das öffnen des CD-Roms nicht direkt mit einem Windows-Befehl anstossen? Dann kannst du es via externem Prozess machen...?


----------



## thE_29 (7. Okt 2004)

naja, ich schätz mal er kann kein C deswegen macht er ja Java 
und warum jetzt extra umlernen, wenn man nur 1e Funktion von C braucht 

wers kann, kanns halt gleich in C machen ...


----------



## bernd (7. Okt 2004)

Ertappt, ich kann kein C!


----------



## bernd (7. Okt 2004)

meez hat gesagt.:
			
		

> Ach ja....
> Kann man das öffnen des CD-Roms nicht direkt mit einem Windows-Befehl anstossen? Dann kannst du es via externem Prozess machen...?



Hört sich auch interessant an, und wie soll sowas aussehen?


----------



## thE_29 (7. Okt 2004)

mit nem vbscript geht das auch irgendwie!

es gab ja Homepages die das auch machten!

_warum hat bei mir der bernd bei seinen 2 posts hintereinander, einmal eine sig und einmal net?_


----------



## thE_29 (7. Okt 2004)

achja, hast du es schon zum Laufen gebracht?


----------



## bernd (7. Okt 2004)

Ne noch nicht wirklich, aber das scheint an meiner IDE zu liegen.
Seit dem letzten Update spinnt die, alte Programme von mir laufen jetzt nämlich auch nicht mehr richtig!
 ???:L


----------



## bernd (7. Okt 2004)

thE_29 hat gesagt.:
			
		

> achja, hast du es schon zum Laufen gebracht?



IDE geht wieder.
Funktioniert einwandfrei! Hätte ich nicht gedacht.
( Hab mich tierisch erschrocken als das Fach dann aufgegangen ist! )   

Das geht auf und schließt sich dann wieder.

Kann man auch das DVD Laufwerk ansprechen, oder muss dafür die dll geändert werden?
 :lol:


----------



## thE_29 (7. Okt 2004)

```
class cdromhandler {

      private native void openCDRom(int iLaufwerk);
      private native void closeCDRom(int iLaufwerk);

      public static void main ( String [ ] args ) {
          new cdromhandler().openCDRom(0); //diese Funktion öffnet ein Laufwerk
          new cdromhandler().closeCDRom(0); //diese Schließt es
      }
      static {

            System.loadLibrary ( "cdromhandler" ) ;
      }
}
```

es öffnet und schließt sich deswegen, weil du es öffnest und schließt  und probier mal statt 0 die 1, du kannst 256 Laufwerke ansteuern


----------



## bernd (7. Okt 2004)

Vielen Dank, ich hatte mir das schon gedacht das ich die Laufwerke wechseln kann
indem ich die Zahl ändere, habe aber lieber mal nachgefragt weil ich gerade am
brennen bin. Und da kommt das dann nicht so gut wenn das falsche Laufwerk aufgeht!
 

Ich schätze ich sollte mich parallel auch was mit C beschäftigen, kann wohl ganz nützlich sein!  :###
 :toll:


----------



## thE_29 (7. Okt 2004)

naja, ich hab eigentlich c/c++ gelernt und ein bisi java, nur bin ich jetzt java programmierer, deswegen kann ich das jetzt auch


----------



## bernd (7. Okt 2004)

Kann nie schaden mehrere Sprachen zu lernen denke ich!
Habe mich vorher mit VB rumgeschlagen, Java gefällt mir aber besser.


----------



## thE_29 (7. Okt 2004)

jo, ist sicherlich nicht schlecht!
bisi assembler kann ich auch noch 

und c# schau ich mir auch ab und an daheim an! es hat viele Vorteile gegenüber java  (get und set methoden => nur noch 1 methode, usw, viele Erleichterungen halt, was java gegenüber c auch schon hat)


----------



## bernd (7. Okt 2004)

Das wäre mir zuviel, hab am Anfang mit Java immer noch VB im Kopf gehabt und da so einiges verdreht!

Fertig gebrannt. Wenn ich die Zahl >0 mache bekomme ich Fehlermeldungen und das Laufwerk geht auf und nicht mehr zu.
Mache ich die Zahl <0 also -1 und so funktioniert es wie mit 0.
Aber das andere Laufwerk lässt sich damit nicht öffnen!


----------



## thE_29 (7. Okt 2004)

mhhmhm!
ich hab hier leider nur 1 laufwerk!
muss mir das daheim anschauen!


----------



## thE_29 (7. Okt 2004)

Sodala, jetzt hab ich mich durch VBasic code wüllen müssen 
aber jetzt kanns auf buchstaben reagieren 
(habs aber auch noch nicht mit mehreren Laufwerken ausprobiert, sollte aber gehen!)


```
class cdromhandler {

      private native void openCDRom(char cLetter);
      private native void closeCDRom(char cLetter);

      public static void main ( String [ ] args ) {
          new cdromhandler().openCDRom('D');
          new cdromhandler().closeCDRom('D'); //sollte klein auch gehen
      }

      static {
            System.loadLibrary ( "cdromhandler" ) ;
      }
}
```

http://forum.geizhals.at/files/7189/cdromhandler.dll
neue dll!

schau halt obs funktioniert, mit meinem D laufwerk gehts hier!


----------



## Illuvatar (7. Okt 2004)

Tja und wie kriegt man jetzt mit Java die Namen der CD-Laufwerke raus? *g


----------



## thE_29 (7. Okt 2004)

naja, ob du jetzt 0, 1 usw für die laufwerke übergeben hättest oder nun den buchstaben, irgendwas musstest du ja wissen 

ich könnte halt einbauen wenn du C übergibst das er die dein defaultcdlaufwerk aufmacht 

edit: hab das mit c jetzt eingebaut, also wenn du c/C übergibst, dann öffnet er dir dein def laufwerk! du musst es dann aber auch wieder mit c schließen!
also
openCDRom('c'); //d = dein def
closeCDRom('d'); //geht nicht!!!!!!

_ jetzt hat dass das file erst!_


----------



## bernd (7. Okt 2004)

Leider nicht das DVD Laufwerk geht auf aber nicht mehr zu und dann wieder die Fehlermeldung!
Wenn ich die Buchstaben ändere wird immer auf das selbe Laufwerk zugegriffen!

Gruß Bernd.


----------



## thE_29 (7. Okt 2004)

also das ist schon sehr komisch!

weil bei mir gehts mit d!
und wenn ich als bsp x eintrage dann gehts!

schau nach ob du auch die neuste version hast
http://www.hausmannstaetten.at/temp/cdromhandler.dll
oder
http://members.aon.at/taschek/cdromhandler.dll schneller als der obere^^


----------



## bernd (7. Okt 2004)

Hab die neueste dll.

Komisch!


----------



## thE_29 (7. Okt 2004)

welches Betriebsystem hast du?
ich hab hier XP. werde aber zu Hause mal nachsehn obs dort geht!
oder jemand hier soll nachsehen obs bei ihm geht....


----------



## bernd (7. Okt 2004)

Ich habe XP Home Edition!


----------



## thE_29 (7. Okt 2004)

kann die dll mal jemand testen und schaun ob sie bei ihm funktioniert??


edit: also ich habs jetzt grad bei nem Kollegen ausprobiert mit WIN2k und bei dem haben beide Laufwerke funktioniert!
versteh also net warum das bei dir net geht!


----------



## bernd (7. Okt 2004)

Ich auch nicht, falsch machen kann man da ja eigentlich nix.


----------



## thE_29 (8. Okt 2004)

machs einfach mal nur mit der klasse (also mit meiner beispielklasse) und schau obs geht!


----------



## bernd (8. Okt 2004)

Also ohne dll wenn ich das richtig verstanden habe!

Ne, das wird zwar einwandfrei compiliert aber tut sich nix!

 ???:L


----------



## thE_29 (8. Okt 2004)

nana, mit dll 
nur halt mit der beispielklasse +dll


----------



## bernd (8. Okt 2004)

Ich glaub ich kann wohl heute nicht ganz folgen! 
Ich benutze die zuletzt runtergeladene dll, und die Klasse
die das Laufwerk mit den Buchstaben oder mit den Zahlen anspricht?

An dll habe ich nur noch die zuletzt runtergeladene,
die alten wurden überschrieben!


----------



## thE_29 (8. Okt 2004)

mit buchstaben 

du sollst ganz einfach das machen

erstelle dir eine datei die cdromhandler.java heißt

erstelle ein verzeichnis wie C:\TEMP

dort kopierst du die java datei (mit dem Inhalt vom bsp - und änder die buchstaben ab) + die dll rein

dann führst du das aus
ins cmd
c:
cd temp
javac cdromhandler.java
java -cp . cdromhandler.java
dann änderst du den buchstaben aufs 2te laufwerk

und dann sag mir obs geht oder net
und wenn ein fehler kommt, machn screenprint und poste mal


----------



## bernd (8. Okt 2004)

Also ich habe jetzt die dll und die Java Datei im selben Ordner und compiliere.
Alles wunderbar.
Dann starte ich das Programm, mein Laufwerk geht auf und es wird mir eine Textdatei
im Ordner wo die dll und die Java Datei liegt angelegt.

In der steht:
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000, pid=3712, tid=3612
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0-b64 mixed mode, sharing)
# Problematic frame:
# C  0x00000000
#

---------------  T H R E A D  ---------------

Current thread (0x00035c30):  JavaThread "main" [_thread_in_native, id=3612]

siginfo: ExceptionCode=0xc0000005, reading address 0x00000000

Registers:
EAX=0x00000000, EBX=0x26a63870, ECX=0x77f49037, EDX=0x00600002
ESP=0x0007fa9c, EBP=0x00000000, ESI=0x26a63870, EDI=0x00035c30
EIP=0x00000000, EFLAGS=0x00010246

Top of Stack: (sp=0x0007fa9c)
0x0007fa9c:   00000000 00000000 00000000 00000000
0x0007faac:   00000000 00000000 00000000 00000000
0x0007fabc:   00000000 00000000 00000000 00000000
0x0007facc:   22a87308 0007fad0 26a63959 0007faf4
0x0007fadc:   26a63bb0 00000000 26a63980 0007faf4
0x0007faec:   0007fb08 00ad0155 22a872f8 00035c30
0x0007fafc:   26a63980 00035c30 00ad0125 0007fb84
0x0007fb0c:   6d6c168d 0007fb3c 0007fce4 0000000a 

Instructions: (pc=0x00000000)
0xfffffff0:   


Stack: [0x00040000,0x00080000),  sp=0x0007fa9c,  free space=254k
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  0x00ad8253
C  0x00000000

[error occurred during error reporting, step 130, id 0xc0000005]


---------------  P R O C E S S  ---------------

Java Threads: ( => current thread )
  0x00a6bb80 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=2516]
  0x00a6a888 JavaThread "CompilerThread0" daemon [_thread_blocked, id=1652]
  0x00a69b08 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=3620]
  0x0003f398 JavaThread "Finalizer" daemon [_thread_blocked, id=1548]
  0x00a66aa0 JavaThread "Reference Handler" daemon [_thread_blocked, id=900]
=>0x00035c30 JavaThread "main" [_thread_in_native, id=3612]

Other Threads:
  0x00a64e70 VMThread [id=3788]
  0x00a69a48 WatcherThread [id=3744]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
 def new generation   total 576K, used 158K [0x22a60000, 0x22b00000, 0x22f40000)
  eden space 512K,  30% used [0x22a60000, 0x22a87ae0, 0x22ae0000)
  from space 64K,   0% used [0x22ae0000, 0x22ae0000, 0x22af0000)
  to   space 64K,   0% used [0x22af0000, 0x22af0000, 0x22b00000)
 tenured generation   total 1408K, used 0K [0x22f40000, 0x230a0000, 0x26a60000)
   the space 1408K,   0% used [0x22f40000, 0x22f40000, 0x22f40200, 0x230a0000)
 compacting perm gen  total 8192K, used 15K [0x26a60000, 0x27260000, 0x2aa60000)
   the space 8192K,   0% used [0x26a60000, 0x26a63c50, 0x26a63e00, 0x27260000)
    ro space 8192K,  66% used [0x2aa60000, 0x2afb7960, 0x2afb7a00, 0x2b260000)
    rw space 12288K,  46% used [0x2b260000, 0x2b7f43a8, 0x2b7f4400, 0x2be60000)

Dynamic libraries:
0x00400000 - 0x0040c000 	C:\Programme\Java\jdk1.5.0\bin\java.exe
0x77f40000 - 0x77fee000 	C:\WINDOWS\System32\ntdll.dll
0x77e40000 - 0x77f38000 	C:\WINDOWS\system32\kernel32.dll
0x77da0000 - 0x77e3c000 	C:\WINDOWS\system32\ADVAPI32.dll
0x78000000 - 0x78087000 	C:\WINDOWS\system32\RPCRT4.dll
0x77be0000 - 0x77c33000 	C:\WINDOWS\system32\MSVCRT.dll
0x6d640000 - 0x6d7c5000 	C:\Programme\Java\jdk1.5.0\jre\bin\client\jvm.dll
0x77d10000 - 0x77d9c000 	C:\WINDOWS\system32\USER32.dll
0x7e180000 - 0x7e1c1000 	C:\WINDOWS\system32\GDI32.dll
0x76af0000 - 0x76b1d000 	C:\WINDOWS\System32\WINMM.dll
0x6d280000 - 0x6d288000 	C:\Programme\Java\jdk1.5.0\jre\bin\hpi.dll
0x76bb0000 - 0x76bbb000 	C:\WINDOWS\System32\PSAPI.DLL
0x6d610000 - 0x6d61c000 	C:\Programme\Java\jdk1.5.0\jre\bin\verify.dll
0x6d300000 - 0x6d31d000 	C:\Programme\Java\jdk1.5.0\jre\bin\java.dll
0x6d630000 - 0x6d63f000 	C:\Programme\Java\jdk1.5.0\jre\bin\zip.dll
0x10000000 - 0x10033000 	C:\Dokumente und Einstellungen\SirKillelot\Eigene Dateien\Java2\Java2\Projekte\Laufwerk\cdromhandler.dll
0x5b0f0000 - 0x5b124000 	C:\WINDOWS\System32\uxtheme.dll
0x494e0000 - 0x494e7000 	C:\Dokumente und Einstellungen\SirKillelot\Eigene Dateien\trayit\TrayIt!.dll
0x72c90000 - 0x72c99000 	C:\WINDOWS\System32\wdmaud.drv
0x72c80000 - 0x72c88000 	C:\WINDOWS\System32\msacm32.drv
0x77bb0000 - 0x77bc4000 	C:\WINDOWS\System32\MSACM32.dll
0x77ba0000 - 0x77ba7000 	C:\WINDOWS\System32\midimap.dll

VM Arguments:
java_command: cdromhandler

Environment Variables:
PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Programme\ATI Technologies\ATI Control Panel;C:\Programme\Gemeinsame Dateien\Ulead Systems\MPEG;C:\Programme\Gemeinsame Dateien\Ulead Systems\DVD;C:\Programme\Gemeinsame Dateien\Autodesk Shared\
USERNAME=SirKillelot
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 15 Model 2 Stepping 9, GenuineIntel


---------------  S Y S T E M  ---------------

OS: Windows XP Build 2600 Service Pack 1

CPU:total 2 family 15, cmov, cx8, fxsr, mmx, sse, sse2, ht

Memory: 4k page, physical 523756k(151976k free), swap 1280668k(1042808k free)

vm_info: Java HotSpot(TM) Client VM (1.5.0-b64) for windows-x86, built on Sep 15 2004 03:00:31 by "java_re" with MS VC++ 6.0


----------



## thE_29 (8. Okt 2004)

gehen wenigstens beide laufwerke auf?

also zugehen tuts bei dir halt nicht mehr?


aha, du used ja jdk 1.5 ich hab die 1.4 das könnte wohl ein prob sein (was aber eher komisch wäre)

so ein Fehlerlog bekommt man eigentlich nur wenn auch son adressfehler passiert, was eigentlich nicht sein sollte....


----------



## bernd (8. Okt 2004)

Nein, es geht immer nur ein Laufwerk auf.
Egal welchen Buchstaben ich auch angebe!

Ist mir langsam peinlich was ich immer für Fragen poste!


----------



## bernd (8. Okt 2004)

Richtig ich hab die Version 1.5 jetzt seit ca. 1 Woche drauf!


----------



## meez (8. Okt 2004)

Schau doch mal folgende Programme an: http://www.handyarchive.com/free/cd-eject/
Vielleicht ist ja eines nützlich...Dann kannst du es über einen Prozess anstossen und ggf. mitliefern..


----------



## bernd (8. Okt 2004)

Mach ich danke!


----------

