C#檢測U盤是否插入

蘭博丶專屬發表於2018-06-16
    public partial class Form1 : Form
    {
        #region u盤屬性
        public const int WM_DEVICECHANGE = 0x219;//U盤插入後,OS的底層會自動檢測到,然後嚮應用程式傳送“硬體裝置狀態改變“的訊息
        public const int DBT_DEVICEARRIVAL = 0x8000;  //就是用來表示U盤可用的。一個裝置或媒體已被插入一塊,現在可用。
        public const int DBT_CONFIGCHANGECANCELED = 0x0019;  //要求更改當前的配置(或取消停靠碼頭)已被取消。
        public const int DBT_CONFIGCHANGED = 0x0018;  //當前的配置發生了變化,由於碼頭或取消固定。
        public const int DBT_CUSTOMEVENT = 0x8006; //自定義的事件發生。 的Windows NT 4.0和Windows 95:此值不支援。
        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;  //此訊息的含義是使用者定義的
        #endregion

        public Form1()
        {
            InitializeComponent();
        }


        #region 檢測u盤
        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盤插入
                            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盤解除安裝
                            MessageBox.Show("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);
        }
        #endregion

    }

 

相關文章