我想检测用户何时插入或移除 USB 声卡。当这种情况发生时,我已经设法真正捕捉到事件,但我不知道刚刚插入了什么。
我尝试了一种基于这个问题的方法:
string query =
"SELECT * FROM __InstanceCreationEvent " +
"WITHIN 2 "
+ "WHERE TargetInstance ISA 'Win32_PnPEntity'";
var watcher = new ManagementEventWatcher(query);
watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
watcher.Start();
虽然我通过 EventArrived 事件获得通知,但我不知道如何确定刚刚插入的设备的实际名称。我已经检查了每个属性,但无法从中得出正面或反面。
我还尝试了一个不同的查询:
var query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent where EventType = 1 or EventType = 2");
var watcher = new ManagementEventWatcher(query);
watcher.EventArrived += watcher_EventArrived;
watcher.Stopped += watcher_Stopped;
watcher.Query = query;
watcher.Start();
但也无济于事。有没有办法找到插入或移除的设备的名称。
最重要的是,我想知道 USB 声卡何时插入或从系统中移除。它应该可以在 Windows 7 和 Vista 上运行(尽管我只会满足于 Win7)。
编辑:根据获胜提交者的建议,我创建了一个包含所有功能的完整解决方案。