# cd laufwerk mit java öffnen



## Lesco (24. Jul 2004)

der titel sagt eigentlich schon alles
wie kann man das cd laufwerk mit java öffnen lassen.
habe eigentlich auch code dazu gefunden dieser benötigt aber das paket com.ms.win32
hab bei google und microsoft gesucht aber nix gefunden.  
Also wo kann ich es herbekommen oder gibt es andere möglichkeiten für mein problem?


----------



## bygones (26. Jul 2004)

geht meines Wissens nicht ohne JNI.... (oder einem package das dir das abnimmt wie du sagst)...

Unter Linux gibt es einen Konsolen Befehl zum öffnen - den kannst du über Runtime.getRuntime().exec(....) ausführen.... (wie es unter Windows damit steht weiß ich net)


----------



## Stefan1200 (26. Jul 2004)

Lesco hat gesagt.:
			
		

> habe eigentlich auch code dazu gefunden dieser benötigt aber das paket com.ms.win32



Wenn ich das richtig gesehen habe, gibt es die von dir angesprochene API nur bei der Microsoft Java VM, die es ja nicht mehr gibt, bzw. geben darf. Ergo nicht mehr verwenden.

Ob es schon eine andere API gibt, die sowas macht, weiß ich nicht, selbst noch nicht gebraucht.


----------



## Guest (3. Okt 2005)

Gibts dazu schon was neues? Kennt jemand eine Lösung zum Öffnen des CD-Laufwerks? Wie kann man aus Java heraus generell ein anderes Programm aufrufen - eine exe-Datei.


----------



## L-ectron-X (3. Okt 2005)

Suche mal im Forum nach Runtime und exec().
Die Frage wird ziemlich häufig gestellt.


----------



## Guest (3. Okt 2005)

Ja ok, habs gefunden.

Wichtiger wäre mir eine gute Lösung für das CD-Laufwerk zu haben. Kennt jemand eine native Windows-Bilbiothek, die ich zum Steuern des CD-Laufwerks nutzen kann?


----------



## Guest (4. Okt 2005)

Hab jetzt eine Lösung mit einem externen Programm hinbekommen: WinEject - Optimal ist es leider nicht und stellt mich noch nicht richtig zufrieden. Also nochmal: Gibt es eine fertige Bibliothek, die einem unter Windows den Zugriff (und die Überwachung) auf die CD-Laufwerke ermöglicht?


----------



## Gast (4. Okt 2005)

Ich nochmal - sorry für das Gespamme - werde mich bestimmt registrieren, wenn ich weiter so viele fragen stelle ...

Hab mir jetzt dieses JNI angesehen. Es klingt zumindestens ganz plausibel und nachvollziehbar. Hatte mich vor sowas eigentlich immer gedrückt.

Hab mich mal umgeschaut und gesehen, dass die Methode mciSendString() mir weiterhelfen könnte, zumindestens was das Öffnen und Schließen angeht. Kennt ihr eine Methode, mit der man den Status des CD-Laufwerks abfragen kann (istOffen, istGeschlossen).

Alternativ bin ich natürlich über eine fertige Bibliothek weiterhin sehr dankbar


----------



## thE_29 (4. Okt 2005)

Ich hätte da ne dll!

Muss kurz mal gucken wie man die einbindet!


----------



## thE_29 (4. Okt 2005)

Also du musst das so einbinden, oder ich muss dir die Dll neu erstellen!

Du fügst deinem Projekt eine Klasse CdromHandler hinzu (public class CdromHandler - keine Innere Klasse dann gehts net!!)

Diese darf auch kein Package haben!

Also sieht ungefähr so aus


```
public class CdromHandler
{
    private native void openCDRom(char cLetter);
    private native void closeCDRom(char cLetter);
    

    static{
        System.loadLibrary("cdromhandler");
    }
    public static void main(String args[])
    {
        new CdromHandler().openCDRom('D');
        new CdromHandler().closeCDRom('D');
    }

}
```

und hier ist die dll

http://www.java-forum.org/codeschnipsel-u-projekte/21831-cd-rom-handler-dll-fuer-windows.html


In das gleiche Verzeichnis (oder in den Library Pfad legen) stellen wie die Java Dateien und dann sollte es gehn!

Wie du die Buchstaben rauskriegst, weißt du doch (FileSystemView.getRoots()) 

Und ne Statusabfrage ist noch nicht drinnen, ... mal schaun ob ich was finde..


Nachtrag: Willst du eine Package Deklaration oder einen anderen Klassennamen, dll Namen musst du mir das sagen, dann muss ich die neu erstellen!


----------



## Gast (4. Okt 2005)

Hi, das hört sich schon mal ziehmlich gut an - ich werde es mal austesten. Was mir wirklich fehlt ist die Statusabfrage. Bei meiner anderen Lösung mit einem anderen Programm war der Vorteil, dass ich immer fragen konnte Process.waitfor() - also erst als das CD-Laufwerk wirklich offen war, ging das Programm weiter. -> Das könnte ich ja mit der Statusabfrage hinbekommen.

Ansonsten benötige ich sie aber auch noch für was anderes. Also ich melde mich später nochmal!


----------



## Gast (4. Okt 2005)

So, jetzt sind mir ein paar Sachen aufgefallen:

Wozu ist die Main-Methode? Sehe nicht, wieso man die dort reinmachen sollte.

Ansonsten habe ich jetzt den Handler um die beiden public Methoden open und close erweitert (welche die private Methoden aufrufen), so dass ich auf das Teil Zugriff habe.

Öffnen funktioniert - leider klappt das schließen nicht. Es gibt keinerlei Fehlermeldungen, er machts einfach nicht zu. Abgesehen von der auch noch fehlenden Statusabfrage, bin ich aber sehr begeistert und hoffe wir bekommen das noch hin ...


----------



## thE_29 (5. Okt 2005)

Mh, also bei mir geht das zumachen....



Probier mal als Laufwerksbuchstabe C mitübergeben, weil dann macht er das Standard CD Laufwerk auf und zu!


----------



## TRunKX (5. Okt 2005)

Hmmm das Prob kenne ich!

Also lösung ist recht einfach: 

1. Was hier acuh schon gesagt wurde externes Programm nutzen

2. Das richtige Finden!


Ich habe so ein Programm damals in einem CPP Forum angefragt und wurde Prompt bedient (bevor die Frage kommt ich habe es nicht hier weil hier ist Arbeit). Das Programm musste man Aufrufen und dann noch /Laufwerksbuchstabe /open or close und schon hat das Programm ohne Anzeige getan worum es gebeten wurde. sollte das Laufwerk kein CD-Rom gewesen sein hats nen fEhler geworfen!


----------



## Gast (5. Okt 2005)

@the_29:

Bei mir sind 3 Laufwerke drin und das Laufwerk welches ich ansprechen möchte ist kein Standard CD Laufwerk. Wird es auch nie sein, von daher gehts nur über den Laufwerksbuchstaben.

Ich bitte euch mir dabei zu helfen, arbeite da gerade in meinem Praktikum dran (2. Woche) - da will ich natürlich auch was vorzeigen können  Wäre jedenfalls toll ...

Ich schicke euch auch bei Interesse mal den Quellcode, wenn es fertig ist.

Also was noch fehlt:

- Laufwerk schließen
- Statusabfrage


----------

