C#usb 識別

   using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace USB
{
    public partial class USB : Form
    {
        public USB()
        {
            InitializeComponent();
        }
        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;
       // private LockScreen Ls = new LockScreen();
        public string ID="";
        public string Value;
        public string[] item;

        [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)
        {
            try
            {
                if (m.Msg == WM_DEVICECHANGE)
                {
                    switch (m.WParam.ToInt32())
                    {
                        case WM_DEVICECHANGE:
                            break;
                        case DBT_DEVICEARRIVAL://U盤有插入
                            this.timer1.Enabled = true;
                            DriveInfo[] s = DriveInfo.GetDrives();
                            foreach (DriveInfo DriveI in s)
                            {
                                if (DriveI.DriveType == DriveType.Removable)
                                {
                                   // Ls.Show();
                                   // this.Hide();
                                   // MessageBox.Show("sss");
                                   
                                    break;
                                }
                                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));
                                    ID=vol.dbcv_unitmask.ToString("x");
                                    this.Text = IO(ID);
                                   this.Tag = IO(ID);
                                   //if (item.Length ==0||IO(ID)!=this.Tag.ToString ())
                                   //{
                                      
                                   //}
                                }
                                this.label1.Text = this.Text;
                            }
                            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盤卸載
                            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));
                                    ID = vol.dbcv_unitmask.ToString("x");
                                    this.Text = IO(ID) + "盤退出!\n";
                                   
                                   
                                }
                                this.label1.Text += this.Text;
                               // MessageBox.Show("U盤已經卸載", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                            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)
            {
                throw new Exception(ex.Message);
            }
            base.WndProc(ref m);
        }

        private void USB_Load(object sender, EventArgs e)
        {
            
        }
        public string  IO(string ff)
                      {
                          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;
          }






        private void timer1_Tick(object sender, EventArgs e)
        {
           // this.Text = ID; 
        }

        private void USB_Load_1(object sender, EventArgs e)
        {

        }
    }
}














    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章