易丰科技

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5234|回复: 0
打印 上一主题 下一主题

c# 侦测 usb 插入/拔出

[复制链接]

111

主题

117

帖子

3588

积分

论坛元老

Rank: 8Rank: 8

积分
3588
跳转到指定楼层
楼主
发表于 2011-10-1 19:09:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易丰科技

GMT+8, 2024-10-13 13:20 , Processed in 0.043196 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表