C#控制台程序 ,运行程序,当电脑的USB插入新设备时,程序有响应

Hamber_Bao 2017-04-05 03:11:07
如题,求大神提供 简洁代码 。
...全文
209 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuggzu 2017-04-05
  • 打赏
  • 举报
回复
检测U盘一般使用Windows消息循环比较方便,但控制台无窗口,无消息循环,所以可在控制台程序启动时加载一个Form,然后把消息循环处理放在此Form(Form1)下: 先添加个Form,然后在此窗体下重写消息处理函数: 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) { if (m.Msg == WM_DEVICECHANGE) { switch (m.WParam.ToInt32()) { case WM_DEVICECHANGE: break; case DBT_DEVICEARRIVAL://U盘插入 { MessageBox.Show("U盘插入!"); } break; case DBT_CONFIGCHANGECANCELED: break; case DBT_CONFIGCHANGED: break; case DBT_CUSTOMEVENT: break; case DBT_DEVICEQUERYREMOVE: break; case DBT_DEVICEQUERYREMOVEFAILED: break; case DBT_DEVICEREMOVECOMPLETE: //U盘卸载 // ............. break; case DBT_DEVICEREMOVEPENDING: break; case DBT_DEVICETYPESPECIFIC: break; case DBT_DEVNODES_CHANGED: break; case DBT_QUERYCHANGECONFIG: break; case DBT_USERDEFINED: break; default: break; } } base.WndProc(ref m); } 如果窗口不想显示可以重写OnShowed函数,隐藏窗体。 再从控制台Main()函数中启动此窗口:Application.Run(new Form1());
stherix 2017-04-05
  • 打赏
  • 举报
回复
还是需要一个不显示出来的窗体 里面需要在消息循环里处理windows消息 系统USB设备插入是有windows消息发来的

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧