CD auswerfen
Frank Dzaebel, erstellt am: 14.05.2007, zuletzt geändert: 14.05.2007
Kategorie:MCI, .NET-Version:2.0, [Download]

Auswerfen und Einziehen einer CD in C#.



Referenz: mciSendString - set, mciGetErrorString

using System;
using System.Windows.Forms;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;

namespace DriveInfoTest
{
  public partial class Form1 : Form
  {
    private void Form1_Load(object sender, EventArgs e)
    {
      DriveInfo[] drives = DriveInfo.GetDrives();
      foreach (DriveInfo drive in drives)
        if (drive.DriveType == DriveType.CDRom)
          cboCDRom.Items.Add(drive.Name);
      cboCDRom.SelectedIndex = 0;
    }

    private void btnAuswerfen_Click(object sender, EventArgs e)
    {
      CdAuswerfen(cboCDRom.Text);
    }

    private void btnEinziehen_Click(object sender, EventArgs e)
    {
      CdEinziehen(cboCDRom.Text);
    }

    void CdAuswerfen(string driveLetter)
    {
      MciSendeKommando(String.Format("set CDAudio!{0} door open", driveLetter));
    }

    void CdEinziehen(string driveLetter)
    {
      MciSendeKommando(String.Format("set CDAudio!{0} door closed", driveLetter));
    }

    void MciSendeKommando(string kommando)
    {
      Cursor = Cursors.AppStarting;
      StringBuilder ret = new StringBuilder();
      int errCode = mciSendString(kommando, ret, sizeBuffer, IntPtr.Zero);
      Cursor = Cursors.Default;
      FehlerCheck(errCode, kommando);
    }

    [DllImport("winmm.dll", CharSet = CharSet.Auto)]
    static extern Int32 mciSendString(String command,
       StringBuilder buffer, Int32 bufferSize, IntPtr hwndCallback);

    [DllImport("winmm.dll", CharSet = CharSet.Auto)]
    static extern int mciGetErrorString(int errCode, StringBuilder errText, int errLen);

    /// <summary>Kein MCI-Error aufgetreten.</summary>
    const int mciSuccess = 0;
    /// <summary>Grösse des Buffers bei mciSendString</summary>
    const int sizeBuffer = 127;
    /// <summary>maximale Länge des StringBuilders bei mciGetErrorString</summary>
    const int maxSB = 255;

    public int FehlerCheck(int errCode, string sendCommand)
    {
      int err = 0;
      if (errCode != 0)
      {
        StringBuilder errText = new StringBuilder(maxSB);
        err = mciGetErrorString(errCode, errText, maxSB);
        MessageBox.Show(errText.ToString() + "\r\nKommando: "+
          sendCommand, "MCI Fehler");
      }
      return err;
    }

    public Form1()
    {
      InitializeComponent();
    }
  }
}