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.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");
}
}
}
}
}
//csharp/4213