- #region USB Device Check start
- //======================================================================================
- //Search the USB device
- 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;
- public const int DBT_DEVTYP_VOLUME = 0x00000002;
- [StructLayout(LayoutKind.Sequential)]
- public struct DEV_BROADCAST_VOLUME
- {
- public int dbcv_size;
- public int dbcv_devicetype;
- public int dbcv_reserved;
- public int dbcv_unitmask;
- }
- protected override void WndProc(ref Message m)
- {
- if (m.Msg == WM_DEVICECHANGE)
- {
- switch (m.WParam.ToInt32())
- {
- case WM_DEVICECHANGE:
- break;
- case DBT_DEVICEARRIVAL://U disk upload
- DriveInfo[] s = DriveInfo.GetDrives();
- foreach (DriveInfo drive in s)
- {
- if (drive.DriveType == DriveType.Removable)
- {
- Console.WriteLine("==================================================");
- Console.WriteLine("the U disk in! ,name:" + drive.Name.ToString());
- break;
- }
- }
- Console.WriteLine("==================================================");
- 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 disk is out
- DriveInfo[] I = DriveInfo.GetDrives();
- foreach (DriveInfo DrInfo in I)
- {
- int devType = Marshal.ReadInt32(m.LParam, 4);
- if (devType == DBT_DEVTYP_VOLUME)
- {
- DEV_BROADCAST_VOLUME vol;
- vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure(m.LParam, typeof(DEV_BROADCAST_VOLUME));
- string ID = vol.dbcv_unitmask.ToString("x");
- Console.WriteLine(IO(ID) + ": U disk out!");
- }
- }
- 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);
- }
- public string IO(string ff)
- {
- string Value = "";
- switch (ff)
- {
- case "1":
- Value = "A:";
- break;
- case "2":
- Value = "B:";
- break;
- case "4":
- Value = "C:";
- break;
- case "8":
- Value = "D:";
- break;
- case "10":
- Value = "E:";
- break;
- case "20":
- Value = "F:";
- break;
- case "40":
- Value = "G:";
- break;
- case "80":
- Value = "H:";
- break;
- case "100":
- Value = "I:";
- break;
- case "200":
- Value = "J:";
- break;
- case "400":
- Value = "K:";
- break;
- case "800":
- Value = "L:";
- break;
- case "1000":
- Value = "M:";
- break;
- case "2000":
- Value = "N:";
- break;
- case "4000":
- Value = "O:";
- break;
- case "8000":
- Value = "P:";
- break;
- case "10000":
- Value = "Q:";
- break;
- case "20000":
- Value = "R:";
- break;
- case "40000":
- Value = "S:";
- break;
- case "80000":
- Value = "T:";
- break;
- case "100000":
- Value = "U:";
- break;
- case "200000":
- Value = "V:";
- break;
- case "400000":
- Value = "W:";
- break;
- case "800000":
- Value = "X:";
- break;
- case "1000000":
- Value = "Y:";
- break;
- case "2000000":
- Value = "Z:";
- break;
- default: break;
- }
- return Value;
- }
- ion USB Device Check End
c# 检测优盘插入,U盘拔出!包括多个U盘
最新推荐文章于 2020-12-21 00:45:42 发布