|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
[Java] Controllare lo sportellino cd
E' possibile in java aprire e chiudere lo sportellino del pc? Come?
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Roma sud
Messaggi: 590
|
Da quanto ho visto su internet direttamente da java e' difficile. Il metodo consigliato e' di richiamare tramite il java un file exe cmq io ho risolto con questo script VBS di Giovanni Cenati cosi' modificato
Codice:
'*****************************************************
' eject.vbs
' Cenati Giovanni - http://digilander.libero.it/Cenati
' Codice liberamente utilizzabile citando il sito
' Questo script trova tutti i lettori cd collegati
' al pc e li espelle.
'*****************************************************
Set oWMP = CreateObject("WMPlayer.OCX.7")
Set colCDROMs = oWMP.cdromCollection
'Chiede a MediaPlayer l'elenco dei drive cdrom
'oppure posso specificarne la lettera come qui sotto.
'Set oCD = oWMP.cdromCollection.getByDriveSpecifier("e:")
'oCD.Eject
if colCDROMs.Count > 0 then
for i=0 to colCDROMs.Count - 1
'Chiede a MediaPlayer la lettera dell'i-esimo drive cdrom
strDrive= oWMP.cdromCollection.item(i).driveSpecifier
colCDROMs.Item(i).Eject
next 'drive nella collezione dei drive CDROM
end if
wscript.quit
Codice:
class Apri
{
public static void main(String args[])
{
try{
Runtime r = Runtime.getRuntime();
Process proc=r.exec("cmd /c apri.vbs");
}
catch(Exception e){}
}
}
Process proc=r.exec("cmd /c apri.vbs"); in Process proc=r.exec("command /c apri.vbs"); ma non ne sono sicuro... ciao
__________________
-Mac Book intel core duo 1,83GHz, 1,25 Gb RAM -Amd athlon 64 dual core 4400+, 2 GB RAM, Asus a8n-sli Deluxe, totale 500 GB di HARD DISK(4 hdd) Ultima modifica di frizzo28 : 09-11-2008 alle 16:24. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Grazie 1000 che non sono pratico di vbs, devo avere qualche libreria particolare installata sul PC?
Esiste un comando per far chiudere lo sportellino, oltre che ad aprirlo? Che so, una cosa tipo: Codice:
'ocd.Close E poi devo fare, in java: Codice:
Runtime.getRuntime().exec("cmd /C sportello.vbs");
Codice:
Runtime.getRuntime().exec("cmd /C start sportello.vbs");
Grazie 1000 |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Roma sud
Messaggi: 590
|
Per richiudere ...
Codice:
'*****************************************************
' eject.vbs
' Cenati Giovanni - http://digilander.libero.it/Cenati
' Codice liberamente utilizzabile citando il sito
' Questo script trova tutti i lettori cd collegati
' al pc e li espelle.
'*****************************************************
Set oWMP = CreateObject("WMPlayer.OCX.7")
Set colCDROMs = oWMP.cdromCollection
'Chiede a MediaPlayer l'elenco dei drive cdrom
'oppure posso specificarne la lettera come qui sotto.
'Set oCD = oWMP.cdromCollection.getByDriveSpecifier("e:")
'oCD.Eject
if colCDROMs.Count > 0 then
for i=0 to colCDROMs.Count - 1
'Chiede a MediaPlayer la lettera dell'i-esimo drive cdrom
strDrive= oWMP.cdromCollection.item(i).driveSpecifier
colCDROMs.Item(i).Eject
colCDROMs.Item(i).Eject
next 'drive nella collezione dei drive CDROM
end if
wscript.quit
Pero' e' da migliorare queto codice... perche' se i lettori sono aperti e poi usi questo per chiudere tutto ok ma se sono chiusi ed esegui il file per chiuderli i lettori vengono aperti e richiusi... cmq questo e' un problema che puoi risolvere tramite VBS facendo un controllo se il lettore e' aperto o meno.. ciao
__________________
-Mac Book intel core duo 1,83GHz, 1,25 Gb RAM -Amd athlon 64 dual core 4400+, 2 GB RAM, Asus a8n-sli Deluxe, totale 500 GB di HARD DISK(4 hdd) |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Grazie mille per l'interessamento, ma ho ancora un dubbio:
Quote:
|
|
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Aug 2005
Città: Roma sud
Messaggi: 590
|
Quote:
Ricordati pero' Quote:
__________________
-Mac Book intel core duo 1,83GHz, 1,25 Gb RAM -Amd athlon 64 dual core 4400+, 2 GB RAM, Asus a8n-sli Deluxe, totale 500 GB di HARD DISK(4 hdd) |
||
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Ok, per me l'importante è che funzioni su XP.
Thanks! |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Funzionerà pure, ma come metodo è orripilante!
![]() Io ti consiglio (visto che la portabilità dici non essere un problema) di interfacciarti tramite JNI a del codice C/C++ che invoca le API Win32 per l'occasione. Ci vuole un po' più di lavoro forse ma è sicuramente un metodo più pulito.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Quote:
|
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Tranquillo, ci vogliono due righe di C, non devi nemmeno conoscerlo il linguaggio.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#11 | |||
|
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
Quote:
stavo per dire ![]() Quote:
|
|||
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Aug 2005
Città: Roma sud
Messaggi: 590
|
Su questo siamo d'accordo ma visto che l'utente ha richiesto esplicitamente come farlo con il java ho cercato di dargli una mano...
Ho citato l'autore... visto che lo script non l'ho fatto io... ma l'ho trovato su internet Su questo non c'e' dubbio sicuramente ce sara' un metodo migliore pe farlo... Quote:
__________________
-Mac Book intel core duo 1,83GHz, 1,25 Gb RAM -Amd athlon 64 dual core 4400+, 2 GB RAM, Asus a8n-sli Deluxe, totale 500 GB di HARD DISK(4 hdd) |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Quote:
|
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Aug 2005
Città: Roma sud
Messaggi: 590
|
@DanieleC88 Ho capito tu cosa intendi... scrivere una DLL in C e poi eseguirla tramite JNI che fa da interfaccia tra i 2 linguaggi... cosi' la soluzione sara' sicuramente migliore di VBscript che e' la prima che mi e' venuta in mente...
Ora mi sto studiando come funziona JNI se riesco posto il codice C e JAVA... Questa mia frase Quote:
Ciao
__________________
-Mac Book intel core duo 1,83GHz, 1,25 Gb RAM -Amd athlon 64 dual core 4400+, 2 GB RAM, Asus a8n-sli Deluxe, totale 500 GB di HARD DISK(4 hdd) |
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
ciao
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Aug 2005
Città: Roma sud
Messaggi: 590
|
Fatto... ecco il codice della DLL in c(compilato con da me con dev c++)
Codice:
#include <windows.h>
#include "Esempio.h"
JNIEXPORT void JNICALL Java_Esempio_Apri
(JNIEnv *env, jobject obj) {
mciSendString("Set cdaudio door open wait",NULL,0,0);
}
JNIEXPORT void JNICALL Java_Esempio_Chiudi
(JNIEnv *env, jobject obj) {
mciSendString("Set cdaudio door closed",NULL,0,0);
}
BOOL APIENTRY DllMain (
HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this is being called. */ ,
LPVOID reserved /* Not used. */ ) {
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
Codice:
public class Esempio {
public native void Apri();
public native void Chiudi();
public static void main(String[] args) {
Esempio ese = new Esempio();
ese.Apri();
//Una semplice pausa di 2 secondi del programma
try
{
Thread.sleep(2000);
}catch(InterruptedException e){}
ese.Chiudi();
}
static {
System.loadLibrary("mylib");
}
}
@DanieleC88 o chiunque altro
__________________
-Mac Book intel core duo 1,83GHz, 1,25 Gb RAM -Amd athlon 64 dual core 4400+, 2 GB RAM, Asus a8n-sli Deluxe, totale 500 GB di HARD DISK(4 hdd) Ultima modifica di frizzo28 : 13-11-2008 alle 22:09. |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Sono anni che non metto mano alle API di Windows, ma mi pare di ricordare ci fosse un metodo più semplice... comunque: http://support.microsoft.com/kb/305184
Fatto questo, con DeviceIoControl() si può controllare l'espulsione dei vari sportellini. ciao
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:40.





















