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 }