Abrir y cerrar bandeja.

Iniciado por Meta, 17 Mayo 2009, 19:44 PM

0 Miembros y 1 Visitante están viendo este tema.

Meta

#10
Por ahora no encuentro nada. Me he dado cuenta que al pulsar el botón de la propia bandeja al abrirla como al cerrarla no se ejecuta el label para que te diga cuando está abierto o cerrado.

Por lo que veo, parece que hay que leer desde el lector la información que suelta la bandeja al abrir y cerrar, así C# lo tendrá que interpretar.

Seguiré buscando información...
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

h0oke

 :rolleyes: Tal vez sirva esta info:

Código (csharp) [Seleccionar]
using System;
using System.Management;

namespace CDROMManagement
{
  class WMIEvent
  {
    static void Main(string[] args)
    {
      WMIEvent we = new WMIEvent();
      ManagementEventWatcher w = null;
      WqlEventQuery q;
      ManagementOperationObserver observer = new
          ManagementOperationObserver();

      // Bind to local machine
      ConnectionOptions opt = new ConnectionOptions();
      opt.EnablePrivileges = true; //sets required privilege
      ManagementScope scope = new ManagementScope( "root\\CIMV2", opt );

      try
      {
        q = new WqlEventQuery();
        q.EventClassName = "__InstanceModificationEvent";
        q.WithinInterval = new TimeSpan( 0, 0, 1 );

        // DriveType - 5: CDROM
        q.Condition = @"TargetInstance ISA 'Win32_LogicalDisk' and
            TargetInstance.DriveType = 5";
        w = new ManagementEventWatcher( scope, q );

        // register async. event handler
        w.EventArrived += new EventArrivedEventHandler( we.CDREventArrived );
        w.Start();

        // Do something usefull,block thread for testing
        Console.ReadLine();
      }
      catch( Exception e )
      {
        Console.WriteLine( e.Message );
      }
      finally
      {
        w.Stop();
      }
    }

    // Dump all properties
    public void CDREventArrived(object sender, EventArrivedEventArgs e)
    {
      // Get the Event object and display it
      PropertyData pd = e.NewEvent.Properties["TargetInstance"];

      if (pd != null)
      {
        ManagementBaseObject mbo = pd.Value as ManagementBaseObject;

        // if CD removed VolumeName == null
        if (mbo.Properties["VolumeName"].Value != null)
        {
          Console.WriteLine("CD has been inserted");
        }
        else
        {
          Console.WriteLine("CD has been ejected");
        }
      }
    }
  }
}

Meta

Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

raul338

#13
 :-[ :D ;-) :o :o :o :o :o

me salvaste la vida (??). Originalmente quería hacer un aplicación que "simulara" ser el dialogo de "que desea hacer? el contenido del cd es (fotos/archivos de video, etc)" que sale cuando ponemos un cd en windows XP, para que funcione en windows 2000  ;D (tengo una pc vieja que la usan personas que no tienen idea de la computacion, solo navegan y chatean xD)


;-) ;-) ;-) Gracias Emt.dev y Meta por ayudar me mas de lo que pedia  ;-) ;-) ;-)


Meta

De nada. Si consigues hacerlo funcionar con tus propios códigos. Lo publicas aquí para verlo.

Saludos y de nada.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

h0oke

De nada. Fue solo cuestión de buscar por la red.
Y como dijo meta, si logras algo, sube tus códigos y compartelos con el foro.  ;)

Salu2!

Meta

#16
Hola de nuevo queridísimos amigos:

Espero que sigan vivos a estas altura de la vida.

Tengo instalado el Virtual Box con openSUSE 13.1 y el último Ubuntu. ¿Con qué compilador y lenguaje es recomendable usar para hacer lo mismo bajo Linux?

Me imagino que será capaz de hacerlo.

aaaaaaaaaaaah. La revisión de códigos sin problemas ninguno como los códigos de arriba, aquí uso el Visual C# 2013 y funciona de maravilla.
Código (csharp) [Seleccionar]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Runtime.InteropServices; // No olvidar.

namespace Lector_IDE
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        [DllImport("winmm.dll")]
        public static extern Int32 mciSendString(string lpstrCommand,
            StringBuilder lpstrReturnString, int uReturnLength, IntPtr hwndCallback);
        //Why did i put this here?
        StringBuilder rt = new StringBuilder(127);

        private void button_Abrir_Click(object sender, EventArgs e)
        {
            mciSendString("set CDAudio door open", rt, 127, IntPtr.Zero);
            label_Mensaje.Text = "Abierto";
        }

        private void button_Cerrar_Click(object sender, EventArgs e)
        {
            mciSendString("set CDAudio door closed", rt, 127, IntPtr.Zero);
            label_Mensaje.Text = "Cerrado";
        }
    }
}


Saludo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/