我一直在尝试监控何时插入或移除USB设备,它似乎工作得很好.现在唯一困扰我的是每次插入设备或删除设备时多次触发事件.
我可以毫无问题地对事件进行分组,但我很好奇为什么它首先发生.
这是我正在使用的查询
SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2 or EventType = 3
Run Code Online (Sandbox Code Playgroud)
插入或移除设备时会触发.以下修改版本......
SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2 or EventType = 3 GROUP WITHIN 1
Run Code Online (Sandbox Code Playgroud)
将事件分组1秒钟.有人可以解释为什么事件被多次触发?
为了完整起见,这里是代码的其余部分.
static void Main(string[] args)
{
var watcher = new ManagementEventWatcher();
var query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2 or EventType = 3 GROUP WITHIN 1 ");
watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
watcher.Query = query;
watcher.Start();
Console.WriteLine("Press a key to exit.");
Console.ReadKey();
}
static void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
Console.WriteLine(string.Format("--> {0}", e.NewEvent.GetType().Name));
Console.WriteLine(string.Format(" {0}", e.NewEvent.ClassPath.ClassName));
Console.WriteLine(string.Format(" Properties [{0}]", e.NewEvent.Properties.Count));
foreach (var prop in e.NewEvent.Properties)
{
Console.WriteLine(string.Format(" Name: {0} Origin: {1} Type: {2} = {3}", prop.Name, prop.Origin, prop.Type.ToString(),prop.Value==null?"{null}":prop.Value.ToString()));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1726 次 |
| 最近记录: |