可以全部监听。好用
private void FormF100WriteCortexLicense_Load(object sender, EventArgs e)
{
this.Text = this.Text + " " + FT_Tools.Program.version;
USB USBWatcher = new USB();
USBWatcher.AddUSBEventWatcher(USBEventHandler, USBEventHandler, new TimeSpan(0, 0, 1));
}
private void USBEventHandler(Object sender, EventArrivedEventArgs e)
{
//暂未实现
var watcher = sender as ManagementEventWatcher;
watcher.Stop();
//刷新设备信息
if (e.NewEvent.ClassPath.ClassName == "__InstanceCreationEvent")
{
Log("Device Arrived");
}
else if (e.NewEvent.ClassPath.ClassName == "__InstanceDeletionEvent")
{
Log("Device Removed");
}
// 业务代码,逻辑耗时尽量不要太长,以免影响事件的监听
watcher.Start();
}
以下可以部分监听
public const int WM_DEVICECHANGE = 0x219;
public const int DBT_DEVICEARRIVAL = 0x8000;
public const int DBT_CONFIGCHANGECANCELED = 0x0019;
public const int DBT_CONFIGCHANGED = 0x0018;
public const int DBT_CUSTOMEVENT = 0x8006;
public const int DBT_DEVICEQUERYREMOVE = 0x8001;
public const int DBT_DEVICEQUERYREMOVEFAILED = 0x8002;
public const int DBT_DEVICEREMOVECOMPLETE = 0x8004;
public const int DBT_DEVICEREMOVEPENDING = 0x8003;
public const int DBT_DEVICETYPESPECIFIC = 0x8005;
public const int DBT_DEVNODES_CHANGED = 0x0007;
public const int DBT_QUERYCHANGECONFIG = 0x0017;
public const int DBT_USERDEFINED = 0xFFFF;
protected override void WndProc(ref Message m)
{
try
{
if (m.Msg == WM_DEVICECHANGE)
{
switch (m.WParam.ToInt32())
{
case WM_DEVICECHANGE:
break;
case DBT_DEVICEARRIVAL:
MessageBox.Show("判断检测USB插入电脑");
DriveInfo[] s = DriveInfo.GetDrives();
foreach (DriveInfo drive in s)
{
if (drive.DriveType == DriveType.Removable)
{
break;
}
}
break;
case DBT_CONFIGCHANGECANCELED:
break;
case DBT_CONFIGCHANGED:
break;
case DBT_CUSTOMEVENT:
break;
case DBT_DEVICEQUERYREMOVE:
break;
case DBT_DEVICEQUERYREMOVEFAILED:
break;
case DBT_DEVICEREMOVECOMPLETE:
MessageBox.Show("判断检测USB拔出电脑");
break;
case DBT_DEVICEREMOVEPENDING:
break;
case DBT_DEVICETYPESPECIFIC:
break;
case DBT_DEVNODES_CHANGED:
break;
case DBT_QUERYCHANGECONFIG:
break;
case DBT_USERDEFINED:
break;
default:
break;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
base.WndProc(ref m);
}
以下不行
public class USBWatcher
{
private MyAPI.MyDel Log;
private ManagementEventWatcher watcher;
public USBWatcher(MyAPI.MyDel Log)
{
this.Log= Log;
}
public void StartWatcher()
{
// 查询USB插入事件
WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2");
// 创建事件监听器
watcher = new ManagementEventWatcher(query);
watcher.EventArrived += OnUSBInserted;
// 开始监听
watcher.Start();
}
public void StopWatcher()
{
// 停止监听
if (watcher != null)
{
watcher.Stop();
watcher.Dispose();
}
}
private void OnUSBInserted(object sender, EventArrivedEventArgs e)
{
// 处理USB插入事件
Log?.Invoke("USBInserted");
}
}