Freitag, 16. März 2012

Prüfen ob CD eingelegt

In diesem Post möchte ich, aufbauend auf das Prinzip des letzten Posts, zeigen, wie man erkennt, wann eine CD eingelegt wird.

Wie im vorigen Post beschrieben benutzen wir dazu wieder das bekannte WM_DEVICECHANGE Ereignis und die Aufzählung System.IO.DriveInfo.GetDrives().
Wir müssen nun beim Prüfen nur abfragen, ob das betrachtete Laufwerk vom Typ DriveType.CDRom ist und eine lesbare CD enthält, was die Variable IsReady anzeigt. In der WndProc() Funktion wird der vorige Wert dieser Variablen mit dem aktuellen verglichen und so entschieden, ob der Benutzer eine neue CD eingelegt hat (für mehrere CD Laufwerke ist der Code entsprechend anzupassen):


        const int WM_DEVICECHANGE = 0x219;
        bool CDInserted;

        private void CheckCD()
        {
            foreach (System.IO.DriveInfo d in System.IO.DriveInfo.GetDrives())
            {
                if (d.DriveType == System.IO.DriveType.CDRom && d.IsReady)
                    CDInserted = true;
            }
        }

        protected override void WndProc(ref Message m)
        {
            if (m.Msg == WM_DEVICECHANGE)
            {
                bool OldCD = CDInserted;
                CheckCD();
                if (!OldCD && CDInserted)
                    MessageBox.Show("CD eingelegt.");
            }

            base.WndProc(ref m);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            CheckCD();
        }


Bei Interesse im Themengebiet Technologie findet ihr weitere Tipps auch im Programmierer-Forum von Techfacts.

Kommentare:

  1. Hallo deine Tipps sind echt super. Ich würde mich mal freuen wenn du ein Tutorial über IMAP (SSL Verbindung) machen könntest.

    AntwortenLöschen
  2. Hey,
    Ich muss sagen, dein Blog ist echt sehr informativ.
    Hab mir hier schon ein paar nette Sachen abgeguckz :)
    Mich würde eine Fortsetzung hierzu freuen: http://csharp-tricks.blogspot.de/2010/06/installieren-und-einbinden-des-directx.html
    Oder hab ich sie einfach nur übersehen? ;)

    Liebe Grüße

    AntwortenLöschen
  3. Hey,

    danke für dein Interesse und Lob :)
    Hast Recht, obwohl angekündigt gibt es dazu leider noch keine Fortsetzung, die Zeit ist leider knapp im Moment ...
    Interessant ist das Thema auf jeden Fall.

    Liebe Grüße

    AntwortenLöschen