c# - 使用 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 - 我唯一需要知道的是如何让受影响的驱动器(字母)脱离这个事件。
解决方案
推荐阅读
- weka - 如何应用 PCA 但保留原始属性?
- r - 如何为因子 x 轴构建带有渐变填充和顶部点/线的 geom_tile/rect 框?
- python - 如何在 tkinter 中设置 PanedWindow 内的默认帧大小?
- android - 使用 Progressive Web App,我可以检索手机的电话号码吗
- javascript - 不调用 WebRTC ontrack
- django - Django 验证并登录到您自己的网站
- vb.net - 可以为接口设置属性,但不能为从接口继承的对象设置属性(语音 API)
- javascript - 如何编写一个返回对象所有值的数组的函数
- php - 如何获取带有偏移量和限制的predis数据?
- javascript - 如何在 Javascript 中获取 SalesForce 选项列表依赖映射