C# 实时检测USB热插拔

/// <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;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值