#region 检测pc光驱里是否插入了光盘,需要添加System.Management.dll 的引用
public void OpenCDRomMonitor()
{
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(this.CDREventArrived);
w.Start();
// Do something usefull,block thread for testing
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
finally
{
w.Stop();
}
}
private 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");
}
}
}
/// <summary>
/// 监控指定位置下是否存在指定类型的文件
/// </summary>
/// <param name="watchPath">监控目录</param>
/// <param name="watchFileType">监控文件类型*.jpg 要搜索的文件类型,例如 "*.txt" 表示所有文本文件</param>
private void OpenFileWatcher(string watchPath, string watchFileType)
{
if (string.IsNullOrEmpty(watchPath))
{
watchPath = AppDomain.CurrentDomain.BaseDirectory;
}
List<string> files = GetFilesRecursively(watchPath,watchFileType);
if (files.Count > 0)
{//存在指定类型的文件
MessageBox.Show("存在指定类型的文件");
}
}
public static List<string> GetFilesRecursively(string folderPath, string searchPattern)
{
List<string> files = new List<string>();
files.AddRange(Directory.GetFiles(folderPath, searchPattern));
string[] subDirs = Directory.GetDirectories(folderPath);
foreach (string subDir in subDirs)
{
files.AddRange(GetFilesRecursively(subDir, searchPattern));
}
return files;
}
#endregion