欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > Qt动态监测USB插拔事件

Qt动态监测USB插拔事件

2024/10/25 19:23:54 来源:https://blog.csdn.net/GraceLand525/article/details/139962453  浏览:    关键词:Qt动态监测USB插拔事件

需要引用头文件

#include <windows.h>
#include <dbt.h>

Qt4用

bool winEvent(MSG *m, long *result);

bool winEventFilter(MSG *m, long *result);

例如:

bool USBTest::winEvent(MSG *m, long *result)
{int msgType = m->message;if (msgType == WM_DEVICECHANGE) {PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)m->lParam;switch (m->wParam) {case DBT_DEVICEARRIVAL:if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME) {PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;if (lpdbv->dbcv_flags == 0) {//QString USBDisk = QString(this->FirstDriveFromMask(lpdbv->dbcv_unitmask));//emit sigUDiskCome(USBDisk);}}break;case DBT_DEVICEREMOVECOMPLETE:if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME) {PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;if (lpdbv->dbcv_flags == 0) {//emit sigUDiskRemove();}}break;case DBT_DEVNODES_CHANGED:{qDebug() << "USB_change";}break;default:break;}}return QWidget::winEvent(m,result);
}

Qt5用

 bool nativeEvent(const QByteArray &eventType, void *message, long *result);

 bool nativeEventFilter(const QByteArray &eventType, void *message, long *result);

例如:

bool USBDisk::nativeEvent(const QByteArray &eventType, void *message, long *result)
{MSG* msg = reinterpret_cast<MSG*>(message);int msgType = msg->message;if (msgType == WM_DEVICECHANGE){PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)msg->lParam;switch (msg->wParam) {case DBT_DEVICEARRIVAL:if (lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE){PDEV_BROADCAST_DEVICEINTERFACE pDevInf = PDEV_BROADCAST_DEVICEINTERFACE(lpdb);QString device_name = "插入设备(name):" + QString::fromWCharArray(pDevInf->dbcc_name, int(pDevInf->dbcc_size)).toUtf8();emit sigUDiskCome(device_name);qDebug() << device_name;}break;case DBT_DEVICEREMOVECOMPLETE:if (lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE){PDEV_BROADCAST_DEVICEINTERFACE pDevInf = PDEV_BROADCAST_DEVICEINTERFACE(lpdb);QString device_name = "移除设备(name):" + QString::fromWCharArray(pDevInf->dbcc_name, int(pDevInf->dbcc_size)).toUtf8();emit sigUDiskRemove();qDebug() << device_name;}break;case DBT_DEVNODES_CHANGED:{qDebug() << "USB_change";}break;}}return QWidget::nativeEvent(eventType, message, result);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com