MFC软件获取USB设备的制造商、产品、序列号
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设备的制造商、产品、序列号相关推荐
- matlab6.0序列号,MFC软件获取USB设备的制造商、产品、序列号
PVOID buf = malloc(100); char * buf1 = (char *)malloc(100); PVOID buf2 = malloc(100); char * buf3 = ...
- 使用正点原子的触摸USB鼠标例程修改产品序列号iSerialNumber为自定义序列号
在使用正点原子mini开发板触摸usb鼠标例程时,通过USB抓包软件USBlyzer抓取到的产品序列号iSerialNumber是一组12位的字符串.如图1所示.通过程序跟踪得知,这个字符串是stm3 ...
- USB设备驱动之驱动
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangweiqing80/article/details/83014292 上一篇文章USB设备驱 ...
- MFC工程按USB插口显示所有USB设备及插口(包括安卓)
最近写资料用到按照USB顺序显示所有的USB设备(设备不用按照插入顺序,只需要插入对应USB插口即可),搜了很多资料没有找到想要的实现方式,便自己动手写了一些库文件(结合USB View以及Windo ...
- windows系统查看USB设备序列号方法汇总
1.win+r 启动命令提示符 输入:reg query HKLM\System\currentcontrolset\enum\usbstor /s ---USB设备马上出现 2.注册表 打开注册表 ...
- 查看USB设备序列号的一些方法
AIDA64--设备-USB设备(序列号) 北信源VRV涉密安全检查-U盘使用记录 本机注册表
- USB产品序列号获取方法
1.烧录的时候,使用单片机序列号功能,然后,代码采用查表方式,获取该单片机序列号,作为USB的产品序列号 2.A/D转换,代码复位的时候,得到某个低精度大容值的电容上电时的电压值. 3 . 搭建电路 ...
- MFC 获取所有USB设备 列举所有USB设备 列举所有USB HUB
获取所有USB设备,列举所有USB设备 #include <INITGUID.h> #include <setupapi.h> #pragma comment(lib, &q ...
- Linux下,查看USB设备信息
Linux下,查看USB设备信息 首先需要将usbfs挂载一下,然后才能查看. $ mount -t usbfs none /proc/bus/usb $ cat /proc/bus/usb/dev ...
最新文章
- 【Java】剑指 Offer 52. 两个链表的第一个公共节点
- 第4关:16位快速加法器设计
- Linux常用目录说明
- python 查看帮助
- VS 2010 测试功能学习(八) - RnP与Coded UI测试(继续篇)
- 使用光标查询10部门的员工姓名和工资,并打印__使用光标查询员工姓名和工资,并打印
- arm的LDMFD--4种堆栈方式
- 大端 小端 原码 反码 补码 及内存中的表现
- java面试时候算法题多吗,Java面试必问算法题
- 技术迭代快速。PyTorch 真的优于Tensorflow吗?
- 样本修改 sample_如何在R中使用sample()获取样本?
- iOS ApplePay paymentData 加解密 (待续)
- python爬虫--从企查查获取所有上市公司列表保存至json
- 服务器usb驱动安装系统安装失败怎么办,usb驱动安装不成功,小编教你usb驱动安装失败的解决方法...
- TB,PB, Eb, Zb, YB
- Iphone6+ 手机边框图片
- 如何优雅地使用 Sublime Text
- PHP和web页面交互(一)
- android自定义抽奖,Android简单实现圆盘抽奖界面
- centos6 安装 nscd 清除DNS缓存
热门文章
- linux备份mysql文件并恢复的脚本,以及其中出现的错误:ERROR: ASCII '\0' appeared in the statement...
- 蛙跳差分格式(非恒定流)
- Word2007插入目录、更新目录后大纲乱掉和无法保存大纲的解决办法
- Flink消费kafka,某partition突然从头开始消费,yarn部署,无报错,很奇怪
- jquery学习笔记及常用函数封装
- Qt音视频开发49-通用截图截屏
- 转载 [技术] SLI常见问题及答案 网址
- LeetCode第一题两数之和
- 产品分析报告:「腾讯相册管家」,你的回忆,由我珍藏
- ❤❤全网最全-----VUE3.0最火爆的编辑器《TinyMCE》❤❤