Hola:
Aquí hay un código que pulsando A o C abre o cierras la bandeja del lector, a parte de esto, dice Abierto, Abriendo... Cerrado y Cerrando... Todo esto pulsado las teclas A o C.
Me he dado cuenta que si cierro la bandeja directamente con la mano, en la ventana o en el CMD de C#, no lo sabe, se queda en Abierto. La idea es que si cierro la bandeja con la mano, en la pantalla muestre el mensaje.
¿Esto es posible de hacer?
Código:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;
namespace Lector_teclado_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 DoEvents()
{
// Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
Console.SetCursorPosition(0, 6);
Console.Write("Abriendo...");
}
public static void DoEvents2()
{
// Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { }));
Console.SetCursorPosition(0, 6);
Console.Write("Cerrando...");
}
static void Main(string[] args)
{
// Título de la ventana.
Console.Title = "Control lector de bandeja.";
// Tamaño ventana consola.
Console.WindowWidth = 55; // X. Ancho.
Console.WindowHeight = 18; // 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);
DoEvents();
mciSendString("set CDAudio door open", rt, 127, IntPtr.Zero);
mensaje = "Abierto.";
break;
case ConsoleKey.C:
// mensaje = "Cerrando...";
Console.SetCursorPosition(0, 6);
DoEvents2();
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);
}
}
}
Sólo debo modificar o ampliar esa función que falta para dejar el programa más completo.
Saludos.