Click here to Skip to main content
16,021,041 members
Articles / Programming Languages / C#
Tip/Trick

How to Detect Insertion of a CD ROM

Rate me:
Please Sign up or sign in to vote.
4.86/5 (6 votes)
5 Dec 2011CPOL 21.5K   7  
How to Detect Insertion of a CD ROM
This C# code detects a CD-ROM being inserted into the CD-ROM drive of a PC. In order to interact with the CD-ROM, you need to use Windows Management Instrumentation (WMI). The .NET Framework provides two sets of classes for interaction with WMI. The System.Management Namespace provides access to management information and events about the system. The System.Management.Instrumentation Namespace provides classes to expose management information and events of an application to WMI.

C#
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");
        }
      }
    }
  }
}

Note... In order to use the System.Management namespace in .NET 2, you will need to add a reference to the System.Management.dll. This can be done in the IDE by right-clicking on the project in the solution explorer and choosing Add Reference... from the list. The DLL is on the first tab towards the end of the list of items.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Technical Lead Erls Corporation
India India
I am Dinesh kumar Choudhary by Name, a software Designer and Developer by Work, a Indian Hindu by Religion, Co-Founder of DSFoundation located at http://dsfoundation.wordpress.com by profession, a Loving husband and a Caring Father by Relation.

I have a blog Website at http://dennosecqtinstien.wordpress.com. DSFoundation is the Autonomous body to serve for the management of Local shops located at New Delhi, India. Now a days DSFoundation and its subsidiaries are managed by Erls Corporation, an Another initiative by me and my colleagues, in which i am the another CO-Founder of the Organization. Erls Corporation can be located at http:erlsindia.co.in

Comments and Discussions

 
-- There are no messages in this forum --