首页 > 解决方案 > 使用 WMI 检测 USB 弹出事件

问题描述

我使用类似这里的代码检测 USB 驱动器插入和移除使用 Windows 服务和 C#来检测 USB 设备何时插入/移除。

但是当用户“弹出”设备并将其插入时,我根本没有收到任何通知。当然,当我尝试访问这样的驱动器时,它会失败。

我可以使用其他 WMI 事件来获取有关这种情况的通知吗?

@Jimi 发布的链接让我更进一步。

public void AddWMIWatcher() {
WqlEventQuery query = new WqlEventQuery();
ManagementScope scope = new ManagementScope("root\\CIMV2");
query.EventClassName = "__InstanceOperationEvent";
query.WithinInterval = new TimeSpan(0, 0, 3);
query.Condition = @"TargetInstance ISA 'Win32_DiskDrive' ";
ManagementEventWatcher watcher = new ManagementEventWatcher(scope, query);
watcher.EventArrived += Watcher_EventArrived;
watcher.Query = query;
watcher.Start();
}
private void Watcher_EventArrived(object sender, EventArrivedEventArgs e) {
ManagementBaseObject baseObject = e.NewEvent;

if(baseObject.ClassPath.ClassName.Equals("__InstanceCreationEvent")) {
    Console.WriteLine("A drive was connected");
}
else if(baseObject.ClassPath.ClassName.Equals("__InstanceDeletionEvent")) {
    Console.WriteLine("A drive was removed");
}
else if(baseObject.ClassPath.ClassName.Equals("__InstanceModificationEvent")) {
    Console.WriteLine("A drive was changed");
    //that is what I'm looking for
}

我得到一个 __InstanceModificationEvent - 我唯一需要知道的是如何让受影响的驱动器(字母)脱离这个事件。

标签: c#wmi

解决方案


推荐阅读