上一篇日志说了如何响应设备插入,但是设备有很多中,多媒体设备,鼠标键盘什么的都是,那如何判断是不是USB设备或者是手机插入呢? 这里就介绍一下我自己的研究结果,当然我没有去研究过苹果设备,但是按道理是类似的。

这里是我自己本人的思路,不一定是最好的方法,如果发现更好的方法我会再拿出来,当然如果你发现更好的方法的话可以留言告诉我。
我的思路是枚举USB设备,并且检查设备的兼容ID和硬件ID
枚举用到的方法包括 SetupDiGetClassDevs 和 SetupDiEnumDeviceInfo, 这两个方法可以在MSDN2008里面查到。
这里简单说明一下用法:
//获取设备信息句柄HDEVINFO hDevInfo = SetupDiGetClassDevs(NULL,L"USB" ,NULL,DIGCF_ALLCLASSES|DIGCF_PRESENT);
//获取设备信息数据
SP_DEVINFO_DATA deviceInfoData;
deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for(int i = 0;SetupDiEnumDeviceInfo(hDevInfo,i,&deviceInfoData);i++) //对USB设备集进行枚举
{

....
}
上面是枚举USB设备的思路,下面讲一下如何分辨USB设备是否就是手机
这里我的思路是判断 兼容ID 和 硬件ID , 这两个ID可以在设备管理器中看得到如下(写这篇日志时我没有android手机,所以我截的图不是手机信息,只是告诉你这么一样东西,你可以自己插入手机试验一下):
有一部分手机直接判断 兼容ID 是否是"usb\\class_ff&subclass_42"即可,
但是有些手机的兼容ID不是这个串,那就比较麻烦了,需要匹配 硬件ID ,但是 硬件ID 不是固定的,好像是跟手机的硬件有关,但是同一款手机型号是一样的,有些品牌如vivo是一个系列都基本一样的硬件ID,甚至现在市面上的很多山寨手机直接就是用HTC的一个硬件ID(哈哈,那时候我去手机店采集硬件ID的时候就感概现在的山寨不硬件识别的ID都直接copy了,这个可能是商业问题,我也不懂.)
获取兼容ID的方法,使用上面枚举获得的 HDEVINFO句柄和SP_DEVINFO_DATA数据 调用 SetupDiGetDeviceRegistryProperty 方法:
  WORD dataType= 0;   DWORD buffSize = 0; SetupDiGetDeviceRegistryProperty(hDevInfo,&deviceInfoData,SPDRP_COMPATIBLEIDS,&dataType,NULL,buffSize,&buffSize);    int err = GetLastError();   if(err != ERROR_INSUFFICIENT_BUFFER)     return;  LPTSTR szCompatibleID = (LPTSTR)LocalAlloc(LPTR,buffSize+1);   SetupDiGetDeviceRegistryProperty(hDevInfo,&deviceInfoData,SPDRP_COMPATIBLEIDS,&dataType,(PBYTE)szCompatibleID ,buffSize,&buffSize);  //szCompatibleID  即是兼容ID

如果 兼容ID == "usb\\class_ff&subclass_42" 就直接可以知道这个是手机设备了(注意要兼容ID的大小写不确定的)

如果 兼容ID != "usb\\class_ff&subclass_42" 那么就要匹配硬件ID了,获取硬件ID的方法和获取兼容ID的方法类似:
  WORD dataType= 0;   DWORD buffSize = 0; SetupDiGetDeviceRegistryProperty(hDevInfo,&deviceInfoData,SPDRP_HARDWAREID,&dataType,NULL,buffSize,&buffSize);   int err = GetLastError();   if(err != ERROR_INSUFFICIENT_BUFFER)     return;  LPTSTR szHardwareID = (LPTSTR)LocalAlloc(LPTR,buffSize+1); SetupDiGetDeviceRegistryProperty(hDevInfo,&deviceInfoData,SPDRP_HARDWAREID,&dataType,(PBYTE)szHardwareID ,buffSize,&buffSize);   //szHardwareID 即是硬件ID
硬件ID 的样子大概是: VID_1234&PID_4321  (1234,4321根据设备有差异,其中VID代表Vendor ID(厂家ID) , PID代表Product ID(产品ID)),VID基本一个厂商. 这个需要收集,但是网上好像有一些VID_PID大全可以满足一般使用.
(其中VID只能判断厂商,有些手机生产商也有别的设备产品,好像索尼有手机也有相机,所以不能轻判哦.
OK,手机判断完成,后面是驱动安装的介绍,手机插入后不一定有驱动,需要有驱动才能进行PC操作手机的功能.

原版地址:http://mongamind.blog.163.com/blog/static/193287261201393005331571/

仿91助手的PC与android手机通讯(2) --- 检测是否是手机相关推荐

  1. [转]仿91助手的PC与android手机通讯

    仿91助手的PC与android手机通讯 原文 知道91助手和豌豆莢吧? 说到这两个东西,最让人好奇的应该是就是和手机的交互了.我之前有研究过电脑和安卓的交互,基本功能已经走通了,在这里我想分享一下. ...

  2. 仿91助手的PC与android手机通讯(4) --- 自动安装手机驱动

    上一节讲到检查驱动安装情况,那么如果遇到没安装手机驱动的话是没办法和手机进行通讯的(除非你是要直接把文件拷贝到手机目录下,好像txt,视频,音乐的话是不用考虑驱动都可以的,当然有驱动这几种文件的拷贝也 ...

  3. 仿91助手的PC与android手机通讯(1) --- 检测设备插入

    知道91助手和豌豆莢吧? 说到这两个东西,最让人好奇的应该是就是和手机的交互了.我之前有研究过电脑和安卓的交互,基本功能已经走通了,在这里我想分享一下. 初初看这个问题觉得很简单,然后如果你有点计算机 ...

  4. 仿91助手的PC与android手机通讯(5) --- 使用adb获取手机信息

    到这里,我知道的就差不多了.后面就是跟android手机的命令传递了.这些操作主要使用到android工具包---adb(android debug bridge).这个东西是google提供的,网上 ...

  5. 基于蓝牙适配器的PC与Android端通讯

    Demo 首先,直接给Demo,对于只想使用的朋友,直接下载使用即可.Demo其实也是从网上爬来的,之后做了各种调试和修改. 原有Demo代码下载,可见地址. 修改后Demo效果如下.效果不太清晰,见 ...

  6. Hbuilder x想调试时却无法检测到IOS手机,但是安卓手机能检测到,这里有解决方案

    Hbuilder x无法检测到苹果手机(IOS) 问题发现 排查问题 解决方案 由于我在网上发现解决这个问题得文章很少,所以打算跟大家分享一下我排查问题及解决问题得方法!希望可以帮到你! 问题发现 因 ...

  7. 摄像头防水性能测试软件,手机摄像头防水测试/手机摄像头气密性检测方法分享...

    原标题:手机摄像头防水测试/手机摄像头气密性检测方法分享 手机作为通讯消费产品,已成为了人们日常生活的必须品,伴随着光电及科学技术的发展,手机在原有通讯功能的基础上又新增多种功能,例如数码照相.看电视 ...

  8. 手机玻璃表面检测机器视觉应用

    随着智能手机的兴起,盖板玻璃在电子行业的应用极其广泛.而盖板缺陷自动检测在智能手机领域被认为是困扰行业多年的技术瓶颈,尤其是覆膜后的手机盖板玻璃检测难度更大.手机盖板玻璃是手机触摸屏最表面的玻璃. 工 ...

  9. 仿91手机助手开发,可提供源码,

    软件主要是仿91手机助手,360手机助手,目前支持安卓Android系统的手机.手机助手支持USB(数据线)连接.WiFi无线连接,及多设备同时接入.您可以使用该软件实现对手机上的基础资料(如:联系人 ...

最新文章

  1. 13.while循环
  2. Android4.0与2.3的差异
  3. 天底下最大的“骗子”——年龄
  4. hdu-1251(基本字典树)
  5. 计算机位数与内存相关,弄懂电脑的各种位数、内存、存储
  6. Linux6、7 系列 安装、卸载mysql
  7. go 语言 php并发,go 语言并发
  8. 【Linux】linux命令iostat
  9. Fedora Linux虚拟机常用开发工具
  10. 今天主要改了罗宾钢琴的首页图片缩放问题
  11. Web前端笔记和简历模板
  12. 6. lcd驱动1-硬件原理
  13. HTML课题背景怎么写,课题研究的背景和意义怎么写
  14. FedEx v20.0.7654的CData驱动程序
  15. 编码:隐藏在计算机软硬件背后的语言(一)编码
  16. 中国剩余定理及其代码实现
  17. AD633JRZ-ASEMI代理ADI亚德诺AD633JRZ车规级芯片
  18. java 注解处理_在java代码中,看到注解,如何查看注解处理器
  19. 三国演义java_三国演义之「策略模式」
  20. 中学教学参考杂志中学教学参考编辑部中学教学参考杂志社2022年第18期目录

热门文章

  1. Deli Deli(模拟,map容器)
  2. 微信小程序列表页分页加载功能
  3. 基于TIA博途利用SCL语言开发沿指令FC全局库来减少工作存储区的使用
  4. 服务器rstudio的安装url怎么修改,Rstudio中更换包镜像服务器的方法
  5. 知识星球APP通证化改造设计
  6. Ubuntu最新、最简单换源方法(中科大源)
  7. python十进制转八进制_python如何进行进制转换
  8. 手写RPC框架(八)
  9. 一款比较不错的由word制作帮助文档的好软件!wordToChm 专业版!推荐使用!
  10. [QCA6174]QCA6174 DFS认证4.6.2.1 Channel Availablity Check Channel 120/124/128信道静默时间不满足10min问题分析及解决方案