冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 3855|回覆: 0
打印 上一主題 下一主題

[心得] [C#] 監控USB插拔

[複製鏈接]

855

主題

0

好友

869

積分

高級贊助會員

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

UID
390967
帖子
1660
主題
855
精華
0
積分
869
楓幣
12244
威望
409
存款
10100
贊助金額
1800
推廣
0
GP
2803
閱讀權限
150
在線時間
197 小時
註冊時間
2023-5-18
最後登入
2024-12-22

2023年紀念勳章 太陽勳章 神手勳章 高級客戶 VIP會員 私服達人 懶人勳章 幼兒勳章 音樂勳章 屁孩勳章 貢獻王 性別(女) 性別(男) 積分勳章 發帖達人 2023端午節紀念勳章 富豪勳章 富可敵國 2023中秋節紀念勳章 解說達人 論壇粉絲 2023聖誕節紀念勳章 2024年紀念勳章 2024端午節紀念勳章 2024中秋節紀念勳章 2024聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-6-20 23:17:48 |只看該作者 |倒序瀏覽
方法一:
  1. public const int DBT_DEVICEQUERYREMOVEFAILED = 0x8002;
  2. public const int DBT_DEVICEREMOVECOMPLETE = 0x8004;
  3. public const int DBT_DEVICEREMOVEPENDING = 0x8003;
  4. public const int DBT_DEVICETYPESPECIFIC = 0x8005;
  5. public const int DBT_DEVNODES_CHANGED = 0x0007;
  6. public const int DBT_QUERYCHANGECONFIG = 0x0017;
  7. public const int DBT_USERDEFINED = 0xFFFF;

  8. // 雙擊滑鼠左鍵
  9. public const int WM_MOUSE_DOUBLE_CHICK = 0x0203;

  10. // USB 監控
  11. protected override void WndProc(ref System.windows.Forms.Message m)
  12. {
  13.     try
  14.     {
  15.         if (m.Msg == WM_DEVICECHANGE)
  16.         {
  17.             switch (m.WParam.ToInt32())
  18.             {
  19.                 case WM_DEVICECHANGE:
  20.                     break;
  21.                 case DBT_DEVICEARRIVAL://USB IN
  22.                     DriveInfo[] s = DriveInfo.GetDrives();
  23.                     foreach (DriveInfo drive in s)
  24.                     {
  25.                         if (drive.DriveType == DriveType.Removable)
  26.                         {
  27.                             MessageBox.Show("U盤已插入,盤符為:" + drive.Name.ToString());
  28.                             break;
  29.                         }
  30.                     }
  31.                     break;
  32.                 case DBT_CONFIGCHANGECANCELED:
  33.                     break;
  34.                 case DBT_CONFIGCHANGED:
  35.                     break;
  36.                 case DBT_CUSTOMEVENT:
  37.                     break;
  38.                 case DBT_DEVICEQUERYREMOVE:
  39.                     break;
  40.                 case DBT_DEVICEQUERYREMOVEFAILED:
  41.                     break;
  42.                 case DBT_DEVICEREMOVECOMPLETE: //USB OUT
  43.                     MessageBox.Show("You Flash ....Bye");
  44.                     break;
  45.                 case DBT_DEVICEREMOVEPENDING:
  46.                     break;
  47.                 case DBT_DEVICETYPESPECIFIC:
  48.                     break;
  49.                 case DBT_DEVNODES_CHANGED:
  50.                     break;
  51.                 case DBT_QUERYCHANGECONFIG:
  52.                     break;
  53.                 case DBT_USERDEFINED:
  54.                     break;
  55.                 default:
  56.                     break;
  57.             }
  58.         }
  59.    
  60.         // Mouse
  61.         if (m.Msg == WM_MOUSE_DOUBLE_CHICK)
  62.         {
  63.             MessageBox.Show("別在雙擊滑鼠左鍵了!");
  64.         }

  65.     }
  66.     catch (Exception ex)
  67.     {
  68.         MessageBox.Show(ex.Message);
  69.     }
  70.     base.WndProc(ref m);
  71. }
複製代碼
方法二:
  1. using System.Management;

  2. ManagementEventWatcher mew = null;

  3. private void Form1_Load(object sender, EventArgs e)
  4. {
  5.     mew = new ManagementEventWatcher("SELECT * FROM __InstanceOperationEvent WITHIN 10 WHERE TargetInstance ISA \"Win32_DiskDrive\"");
  6.     mew.Start();
  7.     mew.EventArrived += new EventArrivedEventHandler(mew_go);
  8. }

  9. private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  10. {
  11.     mew.Stop();
  12. }

  13. private void mew_go(object sender, System.Management.EventArrivedEventArgs e)
  14. {
  15.     ManagementBaseObject newEvent = e.NewEvent, newEventTarget = (newEvent["TargetInstance"] as ManagementBaseObject);
  16.     if (newEventTarget["InterfaceType"].ToString() == "USB")
  17.     {
  18.         switch (newEvent.ClassPath.ClassName)
  19.         {
  20.             case "__InstanceCreationEvent":
  21.                 Listbox_text_Update(listBox1, Convert.ToString(newEventTarget["Caption"])+" 裝置已插入");
  22.                 break;
  23.             case "__InstanceDeletionEvent":
  24.                 Listbox_text_Update(listBox1, Convert.ToString(newEventTarget["Caption"])+" 裝置已退出");
  25.                 break;
  26.         }
  27.     }
  28. }

  29. public static void Listbox_text_Update(ListBox lbox, string s)
  30. {
  31.     if (lbox.InvokeRequired)
  32.     {
  33.         lbox.BeginInvoke(new MethodInvoker(() => Listbox_text_Update(lbox, s)));
  34.     }
  35.     else
  36.     {
  37.         lbox.Items.Add(s);
  38.     }
  39. }
複製代碼
[發帖際遇]: whitefox 因在微軟「PPT」部門工作,遭到某「八大」妓女提告,支付訴訟費 1 楓幣 幸運榜 / 衰神榜
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1鑰匙
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-12-22 19:44

回頂部