1. 程式人生 > >C# 檢測pc光驅裏插入了光盤的代碼

C# 檢測pc光驅裏插入了光盤的代碼

win32 public conn bject type exce rom eject operation

將開發過程經常用的一些代碼段做個備份,如下代碼段是關於C# 檢測pc光驅裏插入了光盤的代碼,應該能對碼農們也有好處。
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();

  ConnectionOptions opt = new ConnectionOptions();
  ManagementScope scope = new ManagementScope( "root\CIMV2", opt );

  try
  {
    q = new WqlEventQuery();
    q.EventClassName = "__InstanceModificationEvent";
    q.WithinInterval = new TimeSpan( 0, 0, 1 );

    q.Condition = @"TargetInstance ISA ‘Win32_LogicalDisk‘ and
        TargetInstance.DriveType = 5";
    w = new ManagementEventWatcher( scope, q );

    w.EventArrived += new EventArrivedEventHandler( we.CDREventArrived );
    w.Start();

    Console.ReadLine();
  }
  catch( Exception e )
  {
    Console.WriteLine( e.Message );
  }
  finally
  {
    w.Stop();
  }
}

public void CDREventArrived(object sender, EventArrivedEventArgs e)
{
  PropertyData pd = e.NewEvent.Properties["TargetInstance"];

  if (pd != null)
  {
    ManagementBaseObject mbo = pd.Value as ManagementBaseObject;

    if (mbo.Properties["VolumeName"].Value != null)
    {
      Console.WriteLine("CD has been inserted");
    }
    else
    {
      Console.WriteLine("CD has been ejected");
    }
  }
}

}
}

C# 檢測pc光驅裏插入了光盤的代碼