Ang*_*ker 14 c# usb wmi plug-and-play
我想检测用户何时插入或移除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();
Run Code Online (Sandbox Code Playgroud)
当我通过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();
Run Code Online (Sandbox Code Playgroud)
但也无济于事.有没有办法找到插入或删除的设备的名称.
最重要的是,我想知道什么时候插入USB声卡或从系统中删除.它应该适用于Windows 7和Vista(虽然我只会满足于Win7).
编辑:根据获胜提交者的建议,我创建了一个包含所有功能的完整解决方案.
Sim*_*ier 10
如果我使用你的第一个代码,我可以像这样定义我的事件:
// define USB class guid (from devguid.h)
static readonly Guid GUID_DEVCLASS_USB = new Guid("{36fc9e60-c465-11cf-8056-444553540000}");
static void watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
ManagementBaseObject instance = (ManagementBaseObject )e.NewEvent["TargetInstance"];
if (new Guid((string)instance["ClassGuid"]) == GUID_DEVCLASS_USB)
{
// we're only interested by USB devices, dump all props
foreach (var property in instance.Properties)
{
Console.WriteLine(property.Name + " = " + property.Value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这会抛出这样的东西:
Availability =
Caption = USB Mass Storage Device
ClassGuid = {36fc9e60-c465-11cf-8056-444553540000}
CompatibleID = System.String[]
ConfigManagerErrorCode = 0
ConfigManagerUserConfig = False
CreationClassName = Win32_PnPEntity
Description = USB Mass Storage Device
DeviceID = USB\VID_18A5&PID_0243\07072BE66DD78609
ErrorCleared =
ErrorDescription =
HardwareID = System.String[]
InstallDate =
LastErrorCode =
Manufacturer = Compatible USB storage device
Name = USB Mass Storage Device
PNPDeviceID = USB\VID_18A5&PID_0243\07072BE66DD78609
PowerManagementCapabilities =
PowerManagementSupported =
Service = USBSTOR
Status = OK
StatusInfo =
SystemCreationClassName = Win32_ComputerSystem
SystemName = KILROY_WAS_HERE
Run Code Online (Sandbox Code Playgroud)
这应该包含您需要的所有内容,包括您可以获得的设备ID instance["DeviceID"].