我正在开发一个项目,需要能够检测何时插入或移除 CD 或 USB 驱动器。我发现一些源代码本应执行此操作,但是,当我插入或弹出 CD 时,似乎没有任何反应。
有人可以验证来源是否正确,并指出我在这里可能做错了什么吗?
public class MyWindow
{
ManagementEventWatcher w;
private void MyWindow_Loaded(object sender, RoutedEventArgs e)
{
WqlEventQuery query = new WqlEventQuery("__InstanceCreationEvent", new TimeSpan(0, 0, 1), @"TargetInstance ISA 'Win32_LogicalDisk' and TargetInstance.DriveType = 2");
ConnectionOptions opt = new ConnectionOptions();
opt.EnablePrivileges = true;
ManagementScope ms = new ManagementScope("root\\CIMV2", opt);
w = new ManagementEventWatcher(ms, query);
w.EventArrived += new EventArrivedEventHandler(w_EventArrived);
w.Start();
}
private void w_EventArrived(object sender, EventArrivedEventArgs e)
{
PropertyData pd = e.NewEvent.Properties["TargetInstance"];
}
}
当我在“PropertyData pd = ...”行上设置断点时,当我弹出/插入 CD 时,它永远不会被击中。因为我根本没有搞乱这一点,而且我在网上看到的所有示例都只是引用了相同的源代码(有细微的变化)
using System.Management;
public void networkDevice()
{
try
{
WqlEventQuery q = new WqlEventQuery();
q.EventClassName = "__InstanceModificationEvent";
q.WithinInterval = new TimeSpan(0, 0, 1);
q.Condition = @"TargetInstance ISA 'Win32_LogicalDisk' and TargetInstance.DriveType = 5";
ConnectionOptions opt = new ConnectionOptions();
opt.EnablePrivileges = true;
opt.Authority = null;
opt.Authentication = AuthenticationLevel.Default;
//opt.Username = "Administrator";
//opt.Password = "";
ManagementScope scope = new ManagementScope("\\root\\CIMV2", opt);
ManagementEventWatcher watcher = new ManagementEventWatcher(scope, q);
watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
watcher.Start();
}
catch (ManagementException e)
{
Console.WriteLine(e.Message);
}
}
void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
ManagementBaseObject wmiDevice = (ManagementBaseObject)e.NewEvent["TargetInstance"];
string driveName = (string)wmiDevice["DeviceID"];
Console.WriteLine(driveName);
Console.WriteLine(wmiDevice.Properties["VolumeName"].Value);
Console.WriteLine((string)wmiDevice["Name"]);
if (wmiDevice.Properties["VolumeName"].Value != null)
Console.WriteLine("CD has been inserted");
else
Console.WriteLine("CD has been ejected");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)