QT5开发笔记(十一)--USB相关
注册插拔事件: 基于WinAPI编程都差不多
GUID HidGuid ={ 0x4D1E55B2, 0xF16F, 0x11CF,{0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30}};
DEV_BROADCAST_DEVICEINTERFACE DevInterface;
ZeroMemory(&DevInterface,sizeof(DEV_BROADCAST_DEVICEINTERFACE));
DevInterface.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
DevInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
DevInterface.dbcc_classguid = HidGuid;
RegisterDeviceNotification((HANDLE)this->winId(),&DevInterface,DEVICE_NOTIFY_WINDOW_HANDLE);
重载nativeEvent函数:
bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
MSG* msg = reinterpret_cast<MSG*>(message);
int msgType = msg->message;
(void)eventType;
(void)result;
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_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
if(lpdbv->dbcv_flags ==0)
{
//插入u盘
//QString USBDisk = QString(this->FirstDriveFromMask(lpdbv ->dbcv_unitmask));
//qDebug() << "USB_Arrived and The USBDisk is: "<<USBDisk ;
ui->textBrowser->append("USB_Arrived and The USBDisk is");
}
}
else if(lpdb->dbch_devicetype = DBT_DEVTYP_DEVICEINTERFACE)
{
}
else
{
}
break;
case DBT_DEVICEREMOVECOMPLETE:
if(lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
}
else if(lpdb->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
{
//PDEV_BROADCAST_DEVICEINTERFACE pDevInf = (PDEV_BROADCAST_DEVICEINTERFACE)lpdb;
//QString strname = QString::fromWCharArray(pDevInf->dbcc_name,pDevInf->dbcc_size);
ui->textBrowser->append("移除设备 ");
}
else
{
}
break;
}
return false;
}