Java - Abrir y cerrar la bandeja

 
Vista:
sin imagen de perfil
Val: 26
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Abrir y cerrar la bandeja

Publicado por Meta (14 intervenciones) el 21/11/2017 10:26:33
Buenos días:

Quiero abrir y cerrar la bandeja del disco. Con C# me funciona en modo consola, pero no tengo idea con Java y lo quiero probar de paso haber si me adapto a Java.

Con Java quiero crear un mini menú de consola y poder hacer lo que tengo que hacer. Para los que estén familarizado con Java, a lo mejor puedes adaptar el código de C# a Java o coger ideas para que vean los tiros a donde quiero llegar.

Código C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using System;
using System.Runtime.InteropServices;
using System.Text;
 
namespace Bandeja_consola_cs
{
    class Program
    {
        [DllImport("winmm.dll")]
        public static extern Int32 mciSendString(string lpstrCommand, StringBuilder lpstrReturnString,
        int uReturnLength, IntPtr hwndCallback);
 
        public static StringBuilder rt = new StringBuilder(127);
 
        public static void DoEventsAbriendo()
        {
            Console.SetCursorPosition(0, 6);
            Console.Write("Abriendo...");
        }
 
        public static void DoEventsCerrando()
        {
            Console.SetCursorPosition(0, 6);
            Console.Write("Cerrando...");
        }
 
        static void Main(string[] args)
        {
            // Título de la ventana.
            Console.Title = "Consola C# 2017";
 
            // Tamaño ventana consola.
            Console.WindowWidth = 29; // X. Ancho.
            Console.WindowHeight = 8; // Y. Alto. 
 
            // Cursor invisible.
            Console.CursorVisible = false;
 
            // Posición del mansaje en la ventana.
            Console.SetCursorPosition(0, 0);
            Console.Write(@"Control bandeja del lector:

A - Abrir bandeja.
C - Cerrar bandeja.
===========================");
 
 
 
            ConsoleKey key;
            //Console.CursorVisible = false;
            do
            {
                key = Console.ReadKey(true).Key;
 
                string mensaje = string.Empty;
 
                //Asignamos la tecla presionada por el usuario
                switch (key)
                {
                    case ConsoleKey.A:
                        // mensaje = "Abriendo...";
                        Console.SetCursorPosition(0, 6);
                        DoEventsAbriendo();
                        mciSendString("set CDAudio door open", rt, 127, IntPtr.Zero);
                        mensaje = "Abierto.";
                        break;
 
                    case ConsoleKey.C:
                        // mensaje = "Cerrando...";
                        Console.SetCursorPosition(0, 6);
                        DoEventsCerrando();
                        mciSendString("set CDAudio door closed", rt, 127, IntPtr.Zero);
                        mensaje = "Cerrado.";
                        break;
                }
 
                Console.SetCursorPosition(0, 6);
                Console.Write("           ");
                Console.SetCursorPosition(0, 6);
                Console.Write(mensaje);
 
            }
            while (key != ConsoleKey.Escape);
        }
    }
}

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Abrir y cerrar la bandeja

Publicado por Tom (1831 intervenciones) el 21/11/2017 16:05:49
Para cargar una dll externa, en Java, deberás usar JNI.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Abrir y cerrar la bandeja

Publicado por Meta (14 intervenciones) el 22/11/2017 00:56:14
Buenas:

¿Puedes hacer un ejemplo?

Aquí otro ejemplo pero con Delphi en modo Formulario, pero es efectivo.
50-1801349

Código Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
unit Bandeja_Delphi;
 
interface
 
// Añadir MMSystem en el uses.
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, MMSystem;
 
type
  TForm1 = class(TForm)
    GroupBox_Bandeja: TGroupBox;
    Button_Abrir: TButton;
    Button_Cerrar: TButton;
    Label_Mensaje: TLabel;
    procedure Button_AbrirClick(Sender: TObject);
    procedure Button_CerrarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button_AbrirClick(Sender: TObject);
begin
    Label_Mensaje.Caption := 'Abriendo...';
    Application.ProcessMessages;
    mciSendString('Set cdaudio door open wait', nil, 0, 0);
    Label_Mensaje.Caption := 'Abierto.';
end;
 
procedure TForm1.Button_CerrarClick(Sender: TObject);
begin
    Label_Mensaje.Caption := 'Cerrando...';
    Application.ProcessMessages;
    mciSendString('Set cdaudio door closed wait', nil, 0, 0);
    Label_Mensaje.Caption := 'Cerrado.';
end;
 
end.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Abrir y cerrar la bandeja

Publicado por Marco (21 intervenciones) el 22/11/2017 18:58:16
Abrir Bandeja con java
Espero que te sirva.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/**
 * 
 */
package com.sabado;
 
import java.io.File;
import java.io.FileWriter;
 
 
 
/**
 * -.-
 *
 */
public class Unidad {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 //mostramos mensajes antes de abrir las bandejas de CD DVD
		javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
	               null, "Pulsa OK para abrir las bandejas de los " +
			       "lectores/grabadores de CD/DVD del equipo.", "Abrir CD/DVD",
	               javax.swing.JOptionPane.DEFAULT_OPTION);
	    Unidad.abrirBandejaCDDVD();
 
		//mostramos mensaje antes de cerrar las bandejas de CD DVD
		javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
	         null, "Pulsa OK para cerrar las bandejas de los " +
			       "lectores/grabadores de CD/DVD del equipo.", "Cerrar CD/DVD",
	         javax.swing.JOptionPane.DEFAULT_OPTION);
	    Unidad.cerrarBandejaCDDVD();
 
	}
 
	 public static void abrirBandejaCDDVD ()
	  {
 
	  try
	  {
	        File file = File.createTempFile("abrirbandejacd",".vbs");
	        file.deleteOnExit();
	        FileWriter fw = new java.io.FileWriter(file);
	        String vbs = "Set objPlayer = CreateObject(\"WMPlayer.OCX.7\") \n"
	                   + "Set collCDROM = objPlayer.cdromCollection \n"
	                   + "if collCDROM.Count >= 1 then \n"
	                   + "For i = 0 to collCDROM.Count - 1 \n"
					   + "collCDROM.Item(i).Eject \n"
					   + "Next \n"
					   + "End If \n";
	        fw.write(vbs);
	        fw.close();
	        Runtime.getRuntime().exec("wscript " + file.getPath()).waitFor();
	    }
	    catch(Exception e)
		{
	        e.printStackTrace();
	    }
	  }
 
	 public static void cerrarBandejaCDDVD()
	  {
	    try
	    {
	        File file = File.createTempFile("cerrarbandejacd",".vbs");
	        file.deleteOnExit();
	        FileWriter fw = new FileWriter(file);
	        //para cerrar las bandejas de CD hay que ejecutar "eject" dos veces
	        String vbs = "Set objPlayer = CreateObject(\"WMPlayer.OCX.7\") \n"
	                   + "Set collCDROM = objPlayer.cdromCollection \n"
	                   + "if collCDROM.Count >= 1 then \n"
	                   + "For i = 0 to collCDROM.Count - 1 \n"
					   + "collCDROM.Item(i).Eject \n"
					   + "collCDROM.Item(i).Eject \n"
					   + "Next \n"
					   + "End If \n";
	        fw.write(vbs);
	        fw.close();
	        Runtime.getRuntime().exec("wscript " + file.getPath()).waitFor();
	    }
	    catch(Exception e)
		{
	        e.printStackTrace();
	    }
	  }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 26
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Abrir y cerrar la bandeja

Publicado por Meta (14 intervenciones) el 22/11/2017 23:43:22
Hola:

Muy bueno. Prefiero usar menos líneas de códigos y usar si es posible el
1
mciSendString(L"Set CDAudio Door Open Wait", 0, 0, 0);

Para que te hagas una idea. Aquí hay uno hecho en C++ con mucho menos líneas de código que en Java y funciona muy bien.

Paso 1:
84-1801402

Paso 2:
85-1801403

Paso3:
Escribir Winmm.lib.
86-1801406

Paso 4:
87-1801409

Sólo se necesita tres includes.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "stdafx.h"
#include "Windows.h"
#include "iostream"
 
using namespace std;
 
int main()
{
	// Título de la ventana.
	SetConsoleTitle(L"Consola C++ Win32 2017");
 
	// Variable.
	char entrada[] = "\0"; // Guarda A, a, C, y c tipo string que introduces desde la consola.
 
	while (true)
	{
		// Muestra en pantalla textos.
		cout << "Control bandeja del lector: " << endl << endl;
		cout << "A - Abrir bandeja." << endl;
		cout << "C - Cerrar bandeja." << endl;
		cout << "==========================" << endl;
 
		cin >> entrada; // Aquí introduces letras A, a, C, y c.
 
		cout << "\n" << endl;
 
		// Abrir bandeja.
		if ((entrada[0] == 'a') || (entrada[0] == 'A'))
		{
			cout << "Abriendo..." << endl << endl; // Muestra en pantalla textos.
			mciSendString(L"set cdaudio door open", nullptr, 0, nullptr);
			cout << "Abierto." << endl << endl; // Muestra en pantalla textos.
		}
		// Cerrar bandeja.
		else if ((entrada[0] == 'c') || (entrada[0] == 'C'))
		{
			cout << "Cerrando..." << endl << endl; // Muestra en pantalla textos.
			mciSendString(L"set cdaudio door closed", nullptr, 0, nullptr);
			cout << "Cerrado." << endl << endl; // Muestra en pantalla textos.
		}
		// Si haz pulsado otro caracter distinto de A, C, a, y c aparece
		else
		{
			cout << "Solo pulsar A o C." << endl << endl; // este mensaje.
 
		}
	}
	return EXIT_SUCCESS;
}


Un cordial saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Abrir y cerrar la bandeja

Publicado por Marco (21 intervenciones) el 23/11/2017 15:54:21
Hola.

Nada más como observación, los lenguajes de Microsoft se adaptan perfectamente a su SO, por lo cual es mucho menor la lineas de código y más facíl de utilizar.
En cuanto Java es mucho más laborioso ocupar funciones nativas del sistema; pero no es imposible.
SI vas a desarrollar aplicaciones de escritorio sugiero que utilizes el lenguaje que ya manejas de microsoft, con el te ahorras tiempo, esfuerzo, menos lineas de código y sobre todo algunos dolores de cabeza.

Muchas gracias por enseñarme como hacerlo con c++ de microsoft, Saludos!!! :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 26
Ha aumentado su posición en 4 puestos en Java (en relación al último mes)
Gráfica de Java

Abrir y cerrar la bandeja

Publicado por Meta (14 intervenciones) el 23/11/2017 16:26:56
Hola:

El MCISendString es común en lenguajes, el que sea, lo que en Java no se hacerlo. Lo he hecho hasta con Delphi y mira los cósigos.

delphi-abrir-cerrar-bandeja-1799091

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
unit Bandeja_Delphi;
 
interface
 
// Añadir MMSystem en el uses.
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, MMSystem;
 
type
  TForm1 = class(TForm)
    GroupBox_Bandeja: TGroupBox;
    Button_Abrir: TButton;
    Button_Cerrar: TButton;
    Label_Mensaje: TLabel;
    procedure Button_AbrirClick(Sender: TObject);
    procedure Button_CerrarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button_AbrirClick(Sender: TObject);
begin
    Label_Mensaje.Caption := 'Abriendo...';
    Application.ProcessMessages;
    mciSendString('Set cdaudio door open wait', nil, 0, 0);
    Label_Mensaje.Caption := 'Abierto.';
end;
 
procedure TForm1.Button_CerrarClick(Sender: TObject);
begin
    Label_Mensaje.Caption := 'Cerrando...';
    Application.ProcessMessages;
    mciSendString('Set cdaudio door closed wait', nil, 0, 0);
    Label_Mensaje.Caption := 'Cerrado.';
end;
 
end.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar