C#编写的自动查找USB HID设备并传输数据,运行自动枚举全部USB HID 设备,从列表中选择并点击连接即可接收数据到PC端,支持win10系统,已测试
完整源码:
USBHIDControl.zip
(247.65 KB, 售价: 5 E币)
部分源码:
- /// <summary>
- /// 获取所有连接HID的设备
- /// </summary>
- /// <param name="deviceList">返回所有连接HID的设备</param>
- private void GetDeviceList(ref List<string> deviceList)
- {
- Guid HIDGuid = Guid.Empty;
- windowsApi.GetDeviceGuid(ref HIDGuid);//获取HID的全局GUID
- IntPtr HIDInfoSet = windowsApi.GetClassDevOfHandle(HIDGuid);//获取包含所有HID接口信息集合的句柄
- if (HIDInfoSet != IntPtr.Zero)
- {
- SP_DEVICE_INTERFACE_DATA interfaceInfo = new SP_DEVICE_INTERFACE_DATA();
- interfaceInfo.cbSize = Marshal.SizeOf(interfaceInfo);
- //检测集合的每个接口
- for (uint index = 0; index < MAX_USB_DEVICES; index++) {
- //获取接口信息
- if (!windowsApi.GetEnumDeviceInterfaces(HIDInfoSet, ref HIDGuid, index, ref interfaceInfo))
- continue;
-
- int buffsize=0;
- //获取接口详细信息;第一次读取错误,但可取得信息缓冲区的大小
- windowsApi.GetDeviceInterfaceDetail(HIDInfoSet,ref interfaceInfo,IntPtr.Zero, ref buffsize);
-
- //接受缓冲
- IntPtr pDetail = Marshal.AllocHGlobal(buffsize);
- SP_DEVICE_INTERFACE_DETAIL_DATA detail = new WindowsAPI.SP_DEVICE_INTERFACE_DETAIL_DATA();
- detail.cbSize = Marshal.SizeOf(typeof(USBHIDControl.WindowsAPI.SP_DEVICE_INTERFACE_DETAIL_DATA));
- Marshal.StructureToPtr(detail, pDetail, false);
- if (windowsApi.GetDeviceInterfaceDetail(HIDInfoSet, ref interfaceInfo, pDetail, ref buffsize))//第二次读取接口详细信息
- deviceList.Add(Marshal.PtrToStringAuto((IntPtr)((int)pDetail + 4)));
- Marshal.FreeHGlobal(pDetail);
- }
- }
- //删除设备信息并释放内存
- windowsApi.DestroyDeviceInfoList(HIDInfoSet);
- }
复制代码
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|