PVOID buf = malloc(100);char * buf1 = (char *)malloc(100);PVOID buf2 = malloc(100);char * buf3 = (char *)malloc(100);PVOID buf4 = malloc(100);char * buf5 = (char *)malloc(100);int num = 0;int num1 = 0;int num2 = 0;PHIDD_ATTRIBUTES a;UpdateData(false); //更新界面int Count = 0; //Total number of devices foundDWORD strSize=0,requiredSize=0;BOOL result1,result2;//定义一些变量,以后会用到SP_DEVINFO_DATA DeviceInfoData;SP_DEVICE_INTERFACE_DATA  DeviceInterfaceData;PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData;//第一步:获取deviceIDGUID deviceId;HidD_GetHidGuid(&deviceId);//第二步:获取设备信息HDEVINFO handle;handle = SetupDiGetClassDevs(&deviceId, NULL, NULL, (DIGCF_DEVICEINTERFACE | DIGCF_PRESENT)); //Get only HID devices//第三步:对所有的设备进行枚举result1=false; //定义一些变量result2=false;CString temp11="";while(1){DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);result1 = SetupDiEnumDeviceInterfaces(handle,NULL, // IN PSP_DEVINFO_DATA  DeviceInfoData,  OPTIONAL&deviceId,Count,&DeviceInterfaceData);   if(result1 == FALSE){break;}//获得设备详细数据(初步)result1 = SetupDiGetDeviceInterfaceDetail(handle,&DeviceInterfaceData,NULL,0,&strSize,NULL);requiredSize=strSize;DeviceInterfaceDetailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredSize);DeviceInterfaceDetailData->cbSize=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);DeviceInfoData.cbSize=sizeof(SP_DEVINFO_DATA);//再次获得详细数据SetupDiGetDeviceInterfaceDetail(handle,&DeviceInterfaceData,DeviceInterfaceDetailData,strSize,&requiredSize,&DeviceInfoData);//获得设备路径(最重要的部分)//m_zf1=DeviceInterfaceDetailData->DevicePath;UpdateData(false);Count++;} if(Count != 0){//AfxMessageBox("进来了");a = (PHIDD_ATTRIBUTES)malloc(100);a->Size = sizeof(struct _HIDD_ATTRIBUTES);HANDLE hCom = CreateFile(DeviceInterfaceDetailData->DevicePath,NULL,//GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);if (hCom == INVALID_HANDLE_VALUE){             AfxMessageBox("无效句柄!");}HidD_GetAttributes(hCom,a);//m_sz1 = a->VendorID;result2 = HidD_GetManufacturerString(hCom,buf,100);if(result2 == FALSE){AfxMessageBox("失败!");}result2 = HidD_GetProductString(hCom,buf2,100);if(result2 == FALSE){AfxMessageBox("失败!");}result2 = HidD_GetSerialNumberString(hCom,buf4,100);if(result2 == FALSE){AfxMessageBox("失败!");}while(1){if(buf1[num-1] != '\0'){if(num == 0){sprintf(buf1,"%s",(char *)buf);}else{sprintf(buf1,"%s%s",buf1,(char *)buf + (2*num));}num++;}else{break;}}while(1){if(buf3[num1-1] != '\0'){if(num1 == 0){sprintf(buf3,"%s",(char *)buf2);}else{sprintf(buf3,"%s%s",buf3,(char *)buf2 + (2*num1));}num1++;}else{break;}}while(1){if(buf5[num2-1] == '\0'){if(num2 == 0){sprintf(buf5,"%s",(char *)buf4);}else{sprintf(buf5,"%s%s",buf5,(char *)buf4 + (2*num1));}num2++;}else{if(num2 == 0){buf5 = "Not specified";}break;}}m_zf1 = buf1;m_zf2 = buf3;m_zf3 = buf5;}UpdateData(false);

关于HID USB键鼠类不能直接用RreadFile函数获取数据,可以用钩子函数钩取键盘和鼠标的状态来实现你得到你要的效果。

转载请附上链接,谢谢。

MFC软件获取USB设备的制造商、产品、序列号相关推荐

  1. matlab6.0序列号,MFC软件获取USB设备的制造商、产品、序列号

    PVOID buf = malloc(100); char * buf1 = (char *)malloc(100); PVOID buf2 = malloc(100); char * buf3 = ...

  2. 使用正点原子的触摸USB鼠标例程修改产品序列号iSerialNumber为自定义序列号

    在使用正点原子mini开发板触摸usb鼠标例程时,通过USB抓包软件USBlyzer抓取到的产品序列号iSerialNumber是一组12位的字符串.如图1所示.通过程序跟踪得知,这个字符串是stm3 ...

  3. USB设备驱动之驱动

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangweiqing80/article/details/83014292 上一篇文章USB设备驱 ...

  4. MFC工程按USB插口显示所有USB设备及插口(包括安卓)

    最近写资料用到按照USB顺序显示所有的USB设备(设备不用按照插入顺序,只需要插入对应USB插口即可),搜了很多资料没有找到想要的实现方式,便自己动手写了一些库文件(结合USB View以及Windo ...

  5. windows系统查看USB设备序列号方法汇总

    1.win+r 启动命令提示符 输入:reg query HKLM\System\currentcontrolset\enum\usbstor /s  ---USB设备马上出现 2.注册表 打开注册表 ...

  6. 查看USB设备序列号的一些方法

    AIDA64--设备-USB设备(序列号) 北信源VRV涉密安全检查-U盘使用记录 本机注册表

  7. USB产品序列号获取方法

    1.烧录的时候,使用单片机序列号功能,然后,代码采用查表方式,获取该单片机序列号,作为USB的产品序列号 2.A/D转换,代码复位的时候,得到某个低精度大容值的电容上电时的电压值. 3 .  搭建电路 ...

  8. MFC 获取所有USB设备 列举所有USB设备 列举所有USB HUB

    获取所有USB设备,列举所有USB设备 #include <INITGUID.h>  #include <setupapi.h> #pragma comment(lib, &q ...

  9. Linux下,查看USB设备信息

    Linux下,查看USB设备信息 首先需要将usbfs挂载一下,然后才能查看. $ mount -t usbfs none /proc/bus/usb $ cat  /proc/bus/usb/dev ...

最新文章

  1. 【Java】剑指 Offer 52. 两个链表的第一个公共节点
  2. 第4关:16位快速加法器设计
  3. Linux常用目录说明
  4. python 查看帮助
  5. VS 2010 测试功能学习(八) - RnP与Coded UI测试(继续篇)
  6. 使用光标查询10部门的员工姓名和工资,并打印__使用光标查询员工姓名和工资,并打印
  7. arm的LDMFD--4种堆栈方式
  8. 大端 小端 原码 反码 补码 及内存中的表现
  9. java面试时候算法题多吗,Java面试必问算法题
  10. 技术迭代快速。PyTorch 真的优于Tensorflow吗?
  11. 样本修改 sample_如何在R中使用sample()获取样本?
  12. iOS ApplePay paymentData 加解密 (待续)
  13. python爬虫--从企查查获取所有上市公司列表保存至json
  14. 服务器usb驱动安装系统安装失败怎么办,usb驱动安装不成功,小编教你usb驱动安装失败的解决方法...
  15. TB,PB, Eb, Zb, YB
  16. Iphone6+ 手机边框图片
  17. 如何优雅地使用 Sublime Text
  18. PHP和web页面交互(一)
  19. android自定义抽奖,Android简单实现圆盘抽奖界面
  20. centos6 安装 nscd 清除DNS缓存

热门文章

  1. linux备份mysql文件并恢复的脚本,以及其中出现的错误:ERROR: ASCII '\0' appeared in the statement...
  2. 蛙跳差分格式(非恒定流)
  3. Word2007插入目录、更新目录后大纲乱掉和无法保存大纲的解决办法
  4. Flink消费kafka,某partition突然从头开始消费,yarn部署,无报错,很奇怪
  5. jquery学习笔记及常用函数封装
  6. Qt音视频开发49-通用截图截屏
  7. 转载 [技术] SLI常见问题及答案 网址
  8. LeetCode第一题两数之和
  9. 产品分析报告:「腾讯相册管家」,你的回忆,由我珍藏
  10. ❤❤全网最全-----VUE3.0最火爆的编辑器《TinyMCE》❤❤