国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

C#源碼 自動枚舉USB HID設備 發送數據 支持兼容windows 10系統

[復制鏈接]
樓主
Jonsa 發表于 2022-4-24 03:02:49 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式
C#編寫的自動查找USB HID設備并傳輸數據,運行自動枚舉全部USB HID 設備,從列表中選擇并點擊連接即可接收數據到PC端,支持win10系統,已測試
完整源碼: USBHIDControl.zip (247.65 KB, 售價: 5 E幣)
C#源碼 自動枚舉USB HID設備 發送數據 支持兼容windows 10系統 1.png C#源碼 自動枚舉USB HID設備 發送數據 支持兼容windows 10系統 2.png

部分源碼:
  1. /// <summary>
  2.         /// 獲取所有連接HID的設備
  3.         /// </summary>
  4.         /// <param name="deviceList">返回所有連接HID的設備</param>
  5.         private void GetDeviceList(ref List<string> deviceList)
  6.         {
  7.             Guid HIDGuid = Guid.Empty;
  8.             windowsApi.GetDeviceGuid(ref HIDGuid);//獲取HID的全局GUID
  9.             IntPtr HIDInfoSet = windowsApi.GetClassDevOfHandle(HIDGuid);//獲取包含所有HID接口信息集合的句柄

  10.             if (HIDInfoSet != IntPtr.Zero)
  11.             {
  12.                 SP_DEVICE_INTERFACE_DATA interfaceInfo = new SP_DEVICE_INTERFACE_DATA();
  13.                 interfaceInfo.cbSize = Marshal.SizeOf(interfaceInfo);

  14.                 //檢測集合的每個接口
  15.                 for (uint index = 0; index < MAX_USB_DEVICES; index++) {
  16.                     //獲取接口信息
  17.                     if (!windowsApi.GetEnumDeviceInterfaces(HIDInfoSet, ref HIDGuid, index, ref interfaceInfo))
  18.                         continue;
  19.                     
  20.                     int buffsize=0;
  21.                     //獲取接口詳細信息;第一次讀取錯誤,但可取得信息緩沖區的大小
  22.                     windowsApi.GetDeviceInterfaceDetail(HIDInfoSet,ref interfaceInfo,IntPtr.Zero, ref buffsize);
  23.                     
  24.                     //接受緩沖
  25.                     IntPtr pDetail = Marshal.AllocHGlobal(buffsize);
  26.                     SP_DEVICE_INTERFACE_DETAIL_DATA detail = new WindowsAPI.SP_DEVICE_INTERFACE_DETAIL_DATA();
  27.                     detail.cbSize = Marshal.SizeOf(typeof(USBHIDControl.WindowsAPI.SP_DEVICE_INTERFACE_DETAIL_DATA));
  28.                     Marshal.StructureToPtr(detail, pDetail, false);
  29.                     if (windowsApi.GetDeviceInterfaceDetail(HIDInfoSet, ref interfaceInfo, pDetail, ref buffsize))//第二次讀取接口詳細信息
  30.                         deviceList.Add(Marshal.PtrToStringAuto((IntPtr)((int)pDetail + 4)));
  31.                     Marshal.FreeHGlobal(pDetail);
  32.                 }
  33.             }

  34.             //刪除設備信息并釋放內存
  35.             windowsApi.DestroyDeviceInfoList(HIDInfoSet);
  36.         }
復制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 00:52

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表