易丰科技

标题: c# 侦测 usb 插入/拔出 [打印本页]

作者: Calvin    时间: 2011-10-1 19:09
标题: c# 侦测 usb 插入/拔出
  1. protected override void WndProc(ref Message m)
  2.         {
  3.             try
  4.             {
  5.                 if (m.Msg == WM_DEVICECHANGE)
  6.                 {
  7.                     switch (m.WParam.ToInt32())
  8.                     {
  9.                         case WM_DEVICECHANGE:
  10.                             break;
  11.                         case DBT_DEVICEARRIVAL://U盘插入
  12.                             DriveInfo[] uin = DriveInfo.GetDrives();
  13.                             foreach (DriveInfo drive in uin)
  14.                             {
  15.                                 if (drive.DriveType == DriveType.Removable)
  16.                                 {
  17.                                     listBox1.Items.Add("U盘已插入,盘符为:" + drive.Name.ToString());
  18.                                     break;
  19.                                 }
  20.                             }
  21.                             break;
  22.                         case DBT_CONFIGCHANGECANCELED:
  23.                             break;
  24.                         case DBT_CONFIGCHANGED:
  25.                             break;
  26.                         case DBT_CUSTOMEVENT:
  27.                             break;
  28.                         case DBT_DEVICEQUERYREMOVE:
  29.                             break;
  30.                         case DBT_DEVICEQUERYREMOVEFAILED:
  31.                             break;
  32.                         case DBT_DEVICEREMOVECOMPLETE: //U盘卸载
  33.                             listBox1.Items.Add("U盘被拔出!");
  34.                             break;
  35.                         case DBT_DEVICEREMOVEPENDING:
  36.                             break;
  37.                         case DBT_DEVICETYPESPECIFIC:
  38.                             break;
  39.                         case DBT_DEVNODES_CHANGED:
  40.                             break;
  41.                         case DBT_QUERYCHANGECONFIG:
  42.                             break;
  43.                         case DBT_USERDEFINED:
  44.                             break;
  45.                         default:
  46.                             break;
  47.                     }
  48.                 }
  49.             }
  50.             catch (Exception ex)
  51.             {
  52.                 MessageBox.Show(ex.Message);
  53.             }
  54.             base.WndProc(ref m);
  55.         }
复制代码
以上的代码"理论上"是可以,但实际会发生"插入"事件没被触发网路上不少人在问到这个问题
最後的答案大概就是要注册 RegisterDeviceNotification
有个写得比较好的程式,是用 c++ 写的~ 杯具:http://www.codeproject.com/KB/system/HwDetect.aspx
找了几个 C# 的例子,实际上~~~ not work
可以用的:
http://www.codeproject.com/KB/cs/UsbManager.aspx
http://www.codeproject.com/KB/system/DriveDetector.aspx






欢迎光临 易丰科技 (http://forum.yftek.com/) Powered by Discuz! X3