QT5.5下的USB HID热插拔检测,未全部完成,聊作记录。
来源:互联网 发布:山东省网络快报 编辑:程序博客网 时间:2024/06/06 04:11
QT5.5下的USB HID热插拔检测,未全部完成,聊作记录。
#if _MSC_VER >= 1600#pragma execution_character_set("utf-8")#endif#include "qrfreceiver.h"#include <QRegularExpression>#include <QDebug>#undef _WIN32_WINNT#define _WIN32_WINNT 0x0500#include <dbt.h>#include <setupapi.h>#pragma comment( lib, "setupapi.lib" )extern "C" {#include <hidsdi.h>}#pragma comment( lib, "hid.lib" )QRfReceiver::QRfReceiver(QWidget *parent) : QWidget(parent){ RegisterHidDeviceNotify(); vendor_id=0x6371; product_id=0x7601;}QRfReceiver::~QRfReceiver(){ if(m_hDevNotify)UnregisterDeviceNotification(m_hDevNotify);}bool QRfReceiver::nativeEvent(const QByteArray &eventType, void *message, long *result){ MSG* msg= reinterpret_cast<MSG*>(message); int msgType = msg->message; if(msgType == WM_DEVICECHANGE) { qDebug() << "收到事件 " <<msg->wParam<<msg->lParam ; PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR )msg->lParam; switch(msg->wParam) { case DBT_DEVICEARRIVAL: //设备插入 { if (lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) { isRightVidAndPid(lpdb); } } break; case DBT_DEVICEREMOVECOMPLETE: //设备拔出 { if (lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE) { PDEV_BROADCAST_DEVICEINTERFACE pDevInf =(PDEV_BROADCAST_DEVICEINTERFACE)lpdb; QString pname=QString::fromWCharArray(pDevInf->dbcc_name+4); qDebug() << "设备拔出"<<pname; QRegularExpression re("HID#VID_(?<vid>\\w{4})&PID_(?<pid>\\w{4})"); QRegularExpressionMatch match = re.match(pname); if (match.hasMatch()) { qDebug() <<match.capturedTexts(); } } break; } }} return false;}bool QRfReceiver::RegisterHidDeviceNotify(){ DEV_BROADCAST_DEVICEINTERFACE NotificationFilter; GUID HidGuid; HidD_GetHidGuid(&HidGuid); ZeroMemory( &NotificationFilter, sizeof(NotificationFilter)); NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; NotificationFilter.dbcc_classguid = HidGuid; m_hDevNotify = RegisterDeviceNotification((HANDLE)this->winId(), &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE); if(!m_hDevNotify) return false; return true;}bool QRfReceiver::isRightVidAndPid(void *p){ PDEV_BROADCAST_DEVICEINTERFACE pDevInf =(PDEV_BROADCAST_DEVICEINTERFACE)p; QString pname=QString::fromWCharArray(pDevInf->dbcc_name+4); qDebug() << "设备插入"<<pname; QRegularExpression re("HID#VID_(?<vid>\\w{4})&PID_(?<pid>\\w{4})"); QRegularExpressionMatch match = re.match(pname); if (match.hasMatch()) { qDebug() << match.capturedTexts(); } return true;}
1 0
- QT5.5下的USB HID热插拔检测,未全部完成,聊作记录。
- USB的HID类
- USB HID通讯的例子,VB.net下使用
- mac 下读写非hid的usb设备
- Windows下读取USB Hid设备数据的经验总结
- USB HID 类的编写
- USB HID类的编写
- USB-HID的初步认识
- android usb Host模式下与usb Hid 设备的通信
- Linux下USB HID device driver研究
- linux下自定义USB HID设备
- USB HID
- USB-HID
- usb hid
- USB HID
- 【USB】 HID
- USB+Hid
- MySql InnonDB锁(未全部完成)
- codeforces-446A-DZY Loves Sequences
- java synchronized/wait/notify/互斥/同步
- where 1<> 1 和where 1=1的用法
- 多线程——NSOperation
- photoshop抠图
- QT5.5下的USB HID热插拔检测,未全部完成,聊作记录。
- Android下adb用法总结
- ecshop 数据库调试技巧 【强烈推荐】
- Htmlparser 中的各种Filter介绍
- UML第十四集(18)之交互图、协作图
- C++构造函数和析构函数显示调用
- HP-VB
- iOS 启动基本流程及基础控件
- UML学习(一):用例图