none
Detectar cuando la bandeja del lector está abierta o cerrada RRS feed

  • Pregunta

  • 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?

    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.


    http://electronica-pic.blogspot.com


    • Editado Metaconta domingo, 12 de noviembre de 2017 0:02
    sábado, 11 de noviembre de 2017 22:14

Respuestas