需要引用头文件
#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);
}