winform监听usb插拔
时间: 2023-08-02 07:01:57 浏览: 70
WinForm监听USB插拔可以通过使用System.Management命名空间中的ManagementEventWatcher类来实现。
首先,在WinForm应用程序中,添加对System.Management命名空间的引用。
然后,创建一个ManagementEventWatcher对象来监听USB设备的插拔事件。可以使用以下代码示例:
```csharp
using System;
using System.Management;
public class USBMonitor
{
private ManagementEventWatcher watcher;
public event EventHandler<USBEventArgs> USBInserted;
public event EventHandler<USBEventArgs> USBRemoved;
public void StartMonitoring()
{
var query = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_USBHub'");
watcher = new ManagementEventWatcher(query);
watcher.EventArrived += Watcher_EventArrived;
watcher.Start();
}
public void StopMonitoring()
{
if (watcher != null)
{
watcher.Stop();
watcher.Dispose();
watcher = null;
}
}
private void Watcher_EventArrived(object sender, EventArrivedEventArgs e)
{
var usb = (ManagementBaseObject)e.NewEvent["TargetInstance"];
var usbEventArgs = new USBEventArgs(usb);
if ((uint)usb["ConfigManagerErrorCode"] == 0)
{
USBInserted?.Invoke(this, usbEventArgs);
}
else
{
USBRemoved?.Invoke(this, usbEventArgs);
}
}
}
public class USBEventArgs : EventArgs
{
public ManagementBaseObject USBDevice { get; private set; }
public USBEventArgs(ManagementBaseObject usbDevice)
{
USBDevice = usbDevice;
}
}
```
在WinForm的代码中,可以初始化并启动USBMonitor类的实例,并订阅USBInserted和USBRemoved事件以处理插拔事件:
```csharp
USBMonitor usbMonitor = new USBMonitor();
usbMonitor.USBInserted += UsbMonitor_USBInserted;
usbMonitor.USBRemoved += UsbMonitor_USBRemoved;
usbMonitor.StartMonitoring();
private void UsbMonitor_USBInserted(object sender, USBEventArgs e)
{
// 处理USB设备插入事件
ManagementBaseObject usbDevice = e.USBDevice;
// ...
}
private void UsbMonitor_USBRemoved(object sender, USBEventArgs e)
{
// 处理USB设备拔出事件
ManagementBaseObject usbDevice = e.USBDevice;
// ...
}
```
通过以上的代码,我们可以在WinForm应用程序中监听USB设备的插拔事件,并进行相应的处理。