下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
获取USB设备信息的方式介绍1需求描述实现USB设备的热插拔状态检测;可识别USB设备信息,例如PID、VID、设备序列号等。2设计思路2.1获取USB设备信息的方式?经过查询,Qt可通过本地事件获取到设备相关信息,用到的的事件函数原型为:boolQWidget::nativeEvent(constQByteArray&eventType,void*message,long*result)官方说明:这个特殊的事件处理程序可以在子类中重新实现,以接收在消息参数中传递的由eventType标识的本机平台事件。在这个函数的重新实现中,如果您想要停止Qt正在处理的事件,请返回true并设置result,结果参数仅在Windows上有意义。如果返回false,此本机事件将被传递回Qt,Qt将该事件转换为Qt事件并将其发送给窗口。注意:只有当窗口具有本地窗口句柄时,事件才会交付给此事件处理程序。很容易理解吧,对于widget窗口而言,这个事件是源头,Qt封装好的事件都从这里来,如果直接返回true界面将无法显示,有兴趣的朋友可以试试。另外,发现没有这个事件是QWidget的,所以只有窗口界面才有,窗口的句柄可以通过QWidget::winId获取到,这个后面注册设备时会用到。2.2准备工作?如果只是重写nativeEvent是不够的,并不能获取到设备信息,只能识别热插拔状态。要识别USB设备信息需要用到GUID,先定义设备的GUID,再注册设备,注册完成后才能获取对应设备的本地事件,从而通过事件获取到设备信息。GUID(全称:GloballyUniqueIdentifier)全局唯一标识符,在windows上使用GUID来管理设备,驱动,总线,类型,块设备,电源等。2.3常用硬件设备GUID
IdentifierClassGUIDGUID_DEVINTERFACE_USB_DEVICE{A5DCBF10-6530-11D2-901F-00C04FB951ED}GUID_DEVINTERFACE_USB_HOST_CONTROLLER{A5DCBF10-6530-11D2-901F-00C04FB951ED}GUID_DEVINTERFACE_USB_HUB{F18A0E88-C30C-11D0-8815-00A0C906BED8}GUID_DEVINTERFACE_NET{CAC88484-7515-4C03-82E6-71A87ABAC361}GUID_DEVINTERFACE_DISK{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}GUID_DEVINTERFACE_CDROM{53F56308-B6BF-11D0-94F2-00A0C91EFB8B}GUID_DEVINTERFACE_KEYBOARD{884B96C3-56EF-11D1-BC8C-00A0C91405DD}GUID_DEVINTERFACE_MOUSE{378DE44C-56EF-11D1-BC8C-00A0C91405DD}GUID_DEVINTERFACE_IMAGE{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}GUID_BTHPORT_DEVICE_INTERFACE{0850302A-B344-4fda-9BE9-90576B8D46F0}太多了,网上可以搜到,这里就不一一列出。
3代码实现windows提供了接口向系统注册设备,注册后当有U盘插拔(或其它volume增删)的时候,会向注册的窗口发送WM_DEVICECHANGE消息:
HDEVNOTIFYWINAPIRegisterDeviceNotification(
__inHANDLEhRecipient,//可以是窗口句柄或者服务句柄
__inLPVOIDNotificationFilter,
__inDWORDFlags//制定hRecipient是窗口句柄,还是服务句柄
);先注册设备,这样才能接收到消息,代码如下:
voidDialog::registerDevice(){constGUIDGUID_DEVINTERFACE_LIST[]={{0xA5DCBF10,0x6530,0x11D2,{0x90,0x1F,0x00,0xC0,0x4F,0xB9,0x51,0xED}},//USB设备的GUID{0x53f56307,0xb6bf,0x11d0,{0x94,0xf2,0x00,0xa0,0xc9,0x1e,0xfb,0x8b}}};HDEVNOTIFYhDevNotify;DEV_BROADCAST_DEVICEINTERFACENotifacationFiler;ZeroMemory(&NotifacationFiler,sizeof(DEV_BROADCAST_DEVICEINTERFACE));NotifacationFiler.dbcc_size=sizeof(DEV_BROADCAST_DEVICEINTERFACE);NotifacationFiler.dbcc_devicetype=DBT_DEVTYP_DEVICEINTERFACE;for(inti=0;i<sizeof(GUID_DEVINTERFACE_LIST)/sizeof(GUID);i++){NotifacationFiler.dbcc_classguid=GUID_DEVINTERFACE_LIST[i];hDevNotify=RegisterDeviceNotification((HANDLE)this->winId(),&NotifacationFiler,DEVICE_NOTIFY_WINDOW_HANDLE);if(!hDevNotify){qCritical()<<QStringLiteral("注册失败!");}}}
通过本地事件获取消息并解析,代码如下:
boolDialog::nativeEvent(constQByteArray&eventType,void*message,long*result){Q_UNUSED(eventType);Q_UNUSED(result);MSG*msg=reinterpret_cast(message);intmsgType=msg->message;if(WM_DEVICECHANGE==msgType){PDEV_BROADCAST_HDRlpdb=(PDEV_BROADCAST_HDR)msg->lParam;switch(msg->wParam){caseDBT_DEVICEARRIVAL:{if(DBT_DEVTYP_VOLUME==lpdb->dbch_devicetype){PDEV_BROADCAST_VOLUMElpdbv=(PDEV_BROADCAST_VOLUME)lpdb;if(0==lpdbv->dbcv_flags){//优盘
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小班小雪节气国旗下讲话稿范文(9篇)
- 开学典礼致辞(15篇)
- 初级会计经济法基础-初级会计《经济法基础》模拟试卷335
- RRD硅油填充术后继发高眼压的眼前节相关影响因素分析及中医体质类型研究
- 建筑与市政工程质量安全巡查的第三方解决方案
- 【医学课件】加强防范医疗事故(83p)
- 2025版食堂食材采购合同及食品安全培训服务协议3篇
- 养鱼店销售员工作总结
- 酒店厨房管理规范制定
- 2025版行政上诉状补充范文:权威解读与实战演练3篇
- 腰麻课件教学课件
- 石油化工企业环境保护管理制度预案
- 2024年甘肃省高考历史试卷(含答案解析)
- 2024年山东省烟台市初中学业水平考试地理试卷含答案
- 《实践论》(原文)毛泽东
- 抗肿瘤治疗所致恶心呕吐护理
- 第三单元名著导读《红星照耀中国》(公开课一等奖创新教学设计+说课稿)
- 压力钢管制造安装及验收规范
- 2024-2030年中国14-丁二醇(BDO)行业市场现状供需分析及重点企业投资评估规划分析研究报告
- YYT 0681.11-2014 无菌医疗器械包装试验方法 第11部分:目力检测医用包装密封完整性
- 辽宁省沈阳市第七中学2023-2024学年七年级下学期期末数学试题
评论
0/150
提交评论