Foros del Web » Programación para mayores de 30 ;) » .NET »

[SOLUCIONADO] Detectar bandeja abierta o cerrada del lector de discos

Estas en el tema de Detectar bandeja abierta o cerrada del lector de discos en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 11/11/2017, 17:57
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 709
Antigüedad: 10 años, 5 meses
Puntos: 8
Detectar bandeja abierta o cerrada del lector de discos

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.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #2 (permalink)  
Antiguo 13/11/2017, 19:54
Avatar de haggenx  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 782
Antigüedad: 10 años, 9 meses
Puntos: 20
Respuesta: Detectar bandeja abierta o cerrada del lector de discos

necesitarías un timer para estar censando si está abierta o cerrada, o que windows de alguna manera le notificara a tu programa que la bandeja se abrió o cerró.
__________________
Mi blog informático http://marjuanm.blogspot.mx
Fanpage del blog https://www.facebook.com/pages/Mis-p...36397183215592
  #3 (permalink)  
Antiguo 15/11/2017, 02:22
 
Fecha de Ingreso: mayo-2007
Ubicación: PIC-16F84A
Mensajes: 709
Antigüedad: 10 años, 5 meses
Puntos: 8
Respuesta: Detectar bandeja abierta o cerrada del lector de discos

Buenas:

Me cuesta entenderte. Por lo que interpretro, con un temporizador, compruebo en todo momento su estado actual.

Si dejo la bandeja abierta pulsando el botón A, se abre. Para cerrar la bandeja del disco, en vez de pulsar la letra C, toco la bandeja con la mano y se cierra sola.

¿Con el timer comprueba si se ha cerrado?

¿Es lo que me quieres decir?

Saludos.
__________________
Meta Shell, VERSIÓN 1.2.2
Descargar
  #4 (permalink)  
Antiguo 15/11/2017, 20:02
Avatar de haggenx  
Fecha de Ingreso: febrero-2007
Ubicación: México
Mensajes: 782
Antigüedad: 10 años, 9 meses
Puntos: 20
Respuesta: Detectar bandeja abierta o cerrada del lector de discos

Cita:
Iniciado por REHome Ver Mensaje
¿Es lo que me quieres decir?
si, otra manera es que windows te informe cuando el hardware cambia https://www.codeproject.com/Articles...rtion-Ejection no lo he probado, pero quizá te sirva (aunque está en vb.net, pero se podría adaptar o tomar la idea)
__________________
Mi blog informático http://marjuanm.blogspot.mx
Fanpage del blog https://www.facebook.com/pages/Mis-p...36397183215592



La zona horaria es GMT -6. Ahora son las 06:03.