【发布时间】:2013-05-13 07:10:04
【问题描述】:
我想检测用户何时插入或移除 USB 声卡。当这种情况发生时,我已经设法实际捕捉到事件,但我不知道刚刚插入了什么。
我尝试了一种基于this问题的方法:
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)。
编辑:根据获奖提交者的建议,我创建了一个包含所有功能的 full solution。
【问题讨论】:
-
使用 RegisterDeviceNotification 事件怎么样?在这个库中使用例如:code.google.com/p/winusbnet
-
@SimonMourier 这个库似乎更适合与 USB 设备通信而不是检测它们。我没有看到任何显示如何检测设备的示例,也没有看到 API 中有任何适合此目的的内容。
标签: c# usb wmi plug-and-play