/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
USB uSB = new USB();
uSB.AddUSBEventWatcher(USBEventHandlerCallBack, USBEventHandlerCallBack, new TimeSpan(0, 0, 3));
}
private static void USBEventHandlerCallBack(Object sender, EventArrivedEventArgs e)
{
if (e.NewEvent.ClassPath.ClassName == "__InstanceCreationEvent")
{
var mWatcher = sender as ManagementEventWatcher;
mWatcher.Stop();
//会检测多次 这里先停止时候暂停 0.2s 在开始
Thread.Sleep(200);
mWatcher.Start();
}
else if (e.NewEvent.ClassPath.ClassName == "__InstanceDeletionEvent")
{
var mWatcher = sender as ManagementEventWatcher;
mWatcher.Stop();
//与上边同理
Thread.Sleep(200);
mWatcher.Start();
}
}
}
public partial class USB
{
/// <summary>
/// USB插入事件监视
/// </summary>
private ManagementEventWatcher insertWatcher = null;
/// <summary>
/// USB拔出事件监视
/// </summary>
private ManagementEventWatcher removeWatcher = null;
/// <summary>
/// 添加USB事件监视器
/// </summary>
/// <param name="usbInsertHandler">USB插入事件处理器</param>
/// <param name="usbRemoveHandler">USB拔出事件处理器</param>
/// <param name="withinInterval">发送通知允许的滞后时间</param>
public Boolean AddUSBEventWatcher(EventArrivedEventHandler usbInsertHandler, EventArrivedEventHandler usbRemoveHandler, TimeSpan withinInterval)
{
try
{
ManagementScope Scope = new ManagementScope("root\\CIMV2");
Scope.Options.EnablePrivileges = true;
// USB插入监视
if (usbInsertHandler != null)
{
WqlEventQuery InsertQuery = new WqlEventQuery("__InstanceCreationEvent", withinInterval, "TargetInstance isa 'Win32_PnPEntity'");
insertWatcher = new ManagementEventWatcher(InsertQuery);
insertWatcher.EventArrived += usbInsertHandler;
insertWatcher.Start();
}
// USB拔出监视
if (usbRemoveHandler != null)
{
WqlEventQuery RemoveQuery = new WqlEventQuery("__InstanceDeletionEvent", withinInterval, "TargetInstance isa 'Win32_PnPEntity'");
removeWatcher = new ManagementEventWatcher(RemoveQuery);
removeWatcher.EventArrived += usbRemoveHandler;
removeWatcher.Start();
}
return true;
}
catch (Exception)
{
RemoveUSBEventWatcher();
return false;
}
}
/// <summary>
/// 移去USB事件监视器
/// </summary>
private void RemoveUSBEventWatcher()
{
if (insertWatcher != null)
{
insertWatcher.Stop();
insertWatcher = null;
}
if (removeWatcher != null)
{
removeWatcher.Stop();
removeWatcher = null;
}
}
}