Buenas:
Lo he intentado hacerlo en Windows Form con.Net 5.0.
Código fuente C#:using System;
using System.Management; // No olvidar y añadir en Dependencias, NuGet.
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace Lector_discos_Net_5_01_cs
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// Variable.
public static string datos = "";
[DllImport("winmm.dll")]
public static extern Int32 mciSendString(string lpstrCommand,
StringBuilder lpstrReturnString,
int uReturnLength,
IntPtr hwndCallback);
StringBuilder rt
= new StringBuilder
(127);
private void button_Abrir_Click(object sender, EventArgs e)
{
label_Mensaje.Text = "Abriendo...";
Application.DoEvents();
discoSiNo();
mciSendString("set CDAudio!" + comboBox_Unidad.Text + " door open", rt, 127, IntPtr.Zero);
/*
Si quieres por ejemplo elegir la unidad que quieras, en este caso la H, se le asigana !H
como indica abajo. En vez de CDAudio, CDAudio!H.
mciSendString("set CDAudio!H door open", rt, 127, IntPtr.Zero);
*/
label_Mensaje.Text = "Abierto.";
}
private void button_Cerrar_Click(object sender, EventArgs e)
{
label_Mensaje.Text = "Cerrando...";
Application.DoEvents();
mciSendString("set CDAudio!" + comboBox_Unidad.Text + " door closed", rt, 127, IntPtr.Zero);
label_Mensaje.Text = "Cerrado.";
label_Mensaje_disco.Text = "Disco en el lector: Leyendo...";
discoSiNo();
}
// Lectura de dispositivos.
void ConsigueComponentes(string hwclass, string syntax)
{
ManagementObjectSearcher mos
= new ManagementObjectSearcher
("root\\CIMV2",
"SELECT * FROM " + hwclass
); foreach (ManagementObject mj in mos.Get())
{
if (Convert.ToString(mj[syntax]) != "")
{
datos = Convert.ToString(mj[syntax]);
}
}
}
// Comprobar si hay disco en el lector.
void discoSiNo()
{
// Disco en la unidad del lector.
ConsigueComponentes("Win32_CDROMDrive", "MediaLoaded");
// ¿Disco en el lector?
if (datos == "True")
{
label_Mensaje_disco.Text = "Disco en el lector: Sí.";
}
else
{
label_Mensaje_disco.Text = "Disco en el lector: No.";
}
// Limpiar.
datos = "";
}
private void Form1_Load(object sender, EventArgs e)
{
discoSiNo();
// Nombre de la unidad.
ConsigueComponentes("Win32_CDROMDrive", "Id");
comboBox_Unidad.Items.Add(datos);
comboBox_Unidad.Text = datos.ToString();
}
}
}
Código WindowsForm .Net 5.0:namespace Lector_discos_Net_5_01_cs
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button_Abrir = new System.Windows.Forms.Button(); this.button_Cerrar = new System.Windows.Forms.Button(); this.groupBox_Bandeja = new System.Windows.Forms.GroupBox(); this.label_Mensaje = new System.Windows.Forms.Label(); this.comboBox_Unidad = new System.Windows.Forms.ComboBox(); this.label_Unidad = new System.Windows.Forms.Label(); this.label_Mensaje_disco = new System.Windows.Forms.Label(); this.groupBox_Bandeja.SuspendLayout();
this.SuspendLayout();
//
// button_Abrir
//
this.button_Abrir.Location = new System.Drawing.Point(32,
146); this.button_Abrir.Name = "button_Abrir";
this.button_Abrir.Size = new System.Drawing.Size(92,
47); this.button_Abrir.TabIndex = 0;
this.button_Abrir.Text = "&Abrir";
this.button_Abrir.UseVisualStyleBackColor = true;
this.button_Abrir.Click += new System.EventHandler(this.button_Abrir_Click); //
// button_Cerrar
//
this.button_Cerrar.Location = new System.Drawing.Point(155,
146); this.button_Cerrar.Name = "button_Cerrar";
this.button_Cerrar.Size = new System.Drawing.Size(92,
47); this.button_Cerrar.TabIndex = 1;
this.button_Cerrar.Text = "&Cerrar";
this.button_Cerrar.UseVisualStyleBackColor = true;
this.button_Cerrar.Click += new System.EventHandler(this.button_Cerrar_Click); //
// groupBox_Bandeja
//
this.groupBox_Bandeja.Controls.Add(this.label_Mensaje);
this.groupBox_Bandeja.Location = new System.Drawing.Point(12,
12); this.groupBox_Bandeja.Name = "groupBox_Bandeja";
this.groupBox_Bandeja.Size = new System.Drawing.Size(249,
117); this.groupBox_Bandeja.TabIndex = 2;
this.groupBox_Bandeja.TabStop = false;
this.groupBox_Bandeja.Text = "Bandeja:";
//
// label_Mensaje
//
this.label_Mensaje.AutoSize = true;
this.label_Mensaje.Font = new System.Drawing.Font("Segoe UI", 27
.75F,
System.Drawing.FontStyle.Bold,
System.Drawing.GraphicsUnit.Point); this.label_Mensaje.Location = new System.Drawing.Point(20,
40); this.label_Mensaje.Name = "label_Mensaje";
this.label_Mensaje.Size = new System.Drawing.Size(54,
50); this.label_Mensaje.TabIndex = 0;
this.label_Mensaje.Text = "¿?";
//
// comboBox_Unidad
//
this.comboBox_Unidad.FormattingEnabled = true;
this.comboBox_Unidad.Location = new System.Drawing.Point(310,
159); this.comboBox_Unidad.Name = "comboBox_Unidad";
this.comboBox_Unidad.Size = new System.Drawing.Size(121,
23); this.comboBox_Unidad.TabIndex = 3;
//
// label_Unidad
//
this.label_Unidad.AutoSize = true;
this.label_Unidad.Location = new System.Drawing.Point(310,
132); this.label_Unidad.Name = "label_Unidad";
this.label_Unidad.Size = new System.Drawing.Size(48,
15); this.label_Unidad.TabIndex = 4;
this.label_Unidad.Text = "Unidad:";
//
// label_Mensaje_disco
//
this.label_Mensaje_disco.AutoSize = true;
this.label_Mensaje_disco.Font = new System.Drawing.Font("Segoe UI", 21
.75F,
System.Drawing.FontStyle.Bold,
System.Drawing.GraphicsUnit.Point); this.label_Mensaje_disco.Location = new System.Drawing.Point(12,
198); this.label_Mensaje_disco.Name = "label_Mensaje_disco";
this.label_Mensaje_disco.Size = new System.Drawing.Size(269,
40); this.label_Mensaje_disco.TabIndex = 5;
this.label_Mensaje_disco.Text = "Disco en el lector: ";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F
); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(463,
247); this.Controls.Add(this.label_Mensaje_disco);
this.Controls.Add(this.label_Unidad);
this.Controls.Add(this.comboBox_Unidad);
this.Controls.Add(this.button_Abrir);
this.Controls.Add(this.groupBox_Bandeja);
this.Controls.Add(this.button_Cerrar);
this.Name = "Form1";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Lector disco C# 2019 - .Net 5.0";
this.Load += new System.EventHandler(this.Form1_Load); this.groupBox_Bandeja.ResumeLayout(false);
this.groupBox_Bandeja.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button button_Abrir;
private System.Windows.Forms.Button button_Cerrar;
private System.Windows.Forms.GroupBox groupBox_Bandeja;
private System.Windows.Forms.Label label_Mensaje;
private System.Windows.Forms.ComboBox comboBox_Unidad;
private System.Windows.Forms.Label label_Unidad;
private System.Windows.Forms.Label label_Mensaje_disco;
}
}
Aquí se trata que no me sale. Es que tengo dos unidades de disco CD-ROM / DVD-ROM.
Se me agrega solo la F:, Falta la G:, pero siempre que sea sea unidad de disco.
Saludos.