易丰科技
标题:
c# 侦测 usb 插入/拔出
[打印本页]
作者:
Calvin
时间:
2011-10-1 19:09
标题:
c# 侦测 usb 插入/拔出
protected override void WndProc(ref Message m)
{
try
{
if (m.Msg == WM_DEVICECHANGE)
{
switch (m.WParam.ToInt32())
{
case WM_DEVICECHANGE:
break;
case DBT_DEVICEARRIVAL://U盘插入
DriveInfo[] uin = DriveInfo.GetDrives();
foreach (DriveInfo drive in uin)
{
if (drive.DriveType == DriveType.Removable)
{
listBox1.Items.Add("U盘已插入,盘符为:" + drive.Name.ToString());
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: //U盘卸载
listBox1.Items.Add("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;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
base.WndProc(ref m);
}
复制代码
以上的代码"理论上"是可以,但实际会发生"插入"事件没被触发网路上不少人在问到这个问题
最後的答案大概就是要注册
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