冰楓論壇

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

[心得] [C#] 偵測(Detection)USB的插入(Insert)以及HID的插入和拔除(Remove)

[複製鏈接]

620

主題

0

好友

765

積分

高級贊助會員

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

UID
390967
帖子
1185
主題
620
精華
0
積分
765
楓幣
6874
威望
308
存款
4100
贊助金額
1800
推廣
0
GP
1622
閱讀權限
150
在線時間
142 小時
註冊時間
2023-5-18
最後登入
2024-4-28

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

跳轉到指定樓層
1
發表於 2023-7-8 13:11:28 |只看該作者 |倒序瀏覽
要修改偵測裝置或是增加可以修改這兩行
USB為GUID_DEVINTERFACE_USB_DEVICE = new Guid("A5DCBF10-6530-11D2-901F-00C04FB951ED");
HID為GUID_DEVINTERFACE_HID        = new Guid("4D1E55B2-F16F-11CF-88CB-001111000030");
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.windows.Forms;
  9. using System.Runtime.InteropServices;

  10. namespace WindowsFormsApplication3
  11. {
  12.     //public partial class Form1 : Form
  13.     public partial class Form1 : Form
  14.     {
  15.         public Form1()
  16.         {
  17.             InitializeComponent();
  18.             RegisterHidNotification();
  19.         }

  20.         protected override void WndProc(ref Message m)
  21.         {
  22.             switch (m.Msg)
  23.             {
  24.             case Win32.WM_DEVICECHANGE:
  25.                 OnDeviceChange(ref m);
  26.                 break;
  27.             }
  28.             base.WndProc(ref m);
  29.         }

  30.         void OnDeviceChange(ref Message msg)
  31.         {
  32.             int wParam = (int)msg.WParam;

  33.             if (wParam == Win32.DBT_DEVICEARRIVAL)
  34.                 label1.Text = "Arrival";
  35.             else if (wParam == Win32.DBT_DEVICEREMOVECOMPLETE)
  36.                 label1.Text = "Remove";
  37.         }

  38.         void RegisterHidNotification()
  39.         {
  40.             Win32.DEV_BROADCAST_DEVICEINTERFACE dbi = new Win32.DEV_BROADCAST_DEVICEINTERFACE();

  41.             int size            = Marshal.SizeOf(dbi);
  42.             dbi.dbcc_size       = size;
  43.             dbi.dbcc_devicetype = Win32.DBT_DEVTYP_DEVICEINTERFACE;
  44.             dbi.dbcc_reserved   = 0;
  45.             dbi.dbcc_classguid  = Win32.GUID_DEVINTERFACE_HID;
  46.             dbi.dbcc_name       = 0;

  47.             IntPtr buffer = Marshal.AllocHGlobal(size);
  48.             Marshal.StructureToPtr(dbi, buffer, true);
  49.             IntPtr r = Win32.RegisterDeviceNotification(Handle, buffer, Win32.DEVICE_NOTIFY_WINDOW_HANDLE);

  50.             if (r == IntPtr.Zero)
  51.                 label1.Text = Win32.GetLastError().ToString();
  52.         }
  53.     }

  54.     class Win32
  55.     {
  56.         public const int WM_DEVICECHANGE              = 0x0219;
  57.         public const int DBT_DEVICEARRIVAL            = 0x8000;
  58.         public const int DBT_DEVICEREMOVECOMPLETE     = 0x8004;
  59.         public const int DEVICE_NOTIFY_WINDOW_HANDLE  = 0;
  60.         public const int DEVICE_NOTIFY_SERVICE_HANDLE = 1;

  61.         public const int DBT_DEVTYP_DEVICEINTERFACE   = 5;

  62.         public static Guid GUID_DEVINTERFACE_HID        = new Guid("4D1E55B2-F16F-11CF-88CB-001111000030");
  63.         public static Guid GUID_DEVINTERFACE_USB_DEVICE = new Guid("A5DCBF10-6530-11D2-901F-00C04FB951ED");

  64.         [StructLayout(LayoutKind.Sequential)]
  65.         public class DEV_BROADCAST_DEVICEINTERFACE
  66.         {
  67.             public int   dbcc_size;
  68.             public int   dbcc_devicetype;
  69.             public int   dbcc_reserved;
  70.             public Guid  dbcc_classguid;
  71.             public short dbcc_name;
  72.         }

  73.         [DllImport("user32.dll", SetLastError = true)]
  74.         public static extern IntPtr RegisterDeviceNotification(IntPtr hRecipient, IntPtr NotificationFilter, Int32 Flags);
  75.         [DllImport("kernel32.dll")]
  76.         public static extern int GetLastError();
  77.     }
  78. }
複製代碼
收藏收藏0 推0 噓0


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

廣告刊登意見回饋關於我們職位招聘本站規範DMCA隱私權政策

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

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

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

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

GMT+8, 2024-4-29 04:08

回頂部