QT5 检测 usb设备插拔

来源:互联网 发布:java运行出现antbuild 编辑:程序博客网 时间:2024/04/30 04:28

    // GUID_DEVINTERFACE_USB_DEVICE    { 0xA5DCBF10, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } },        /注册插拔事件    HDEVNOTIFY hDevNotify;    DEV_BROADCAST_DEVICEINTERFACE NotifacationFiler;    ZeroMemory(&NotifacationFiler,sizeof(DEV_BROADCAST_DEVICEINTERFACE));    NotifacationFiler.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);    NotifacationFiler.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;  for(int i=0;i<sizeof(GUID_DEVINTERFACE_LIST)/sizeof(GUID);i++)    {        NotifacationFiler.dbcc_classguid = GUID_DEVINTERFACE_LIST[i];//GetCurrentUSBGUID();//m_usb->GetDriverGUID();        hDevNotify = RegisterDeviceNotification((HANDLE)this->winId(),&NotifacationFiler,DEVICE_NOTIFY_WINDOW_HANDLE);        if(!hDevNotify)        {            int Err = GetLastError();            qDebug() << "注册失败" <<endl;        }        //else    }        bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result){    MSG* msg = reinterpret_cast<MSG*>(message);    int msgType = msg->message;    if(msgType==WM_DEVICECHANGE)    {        //qDebug() << "Event DEVICECHANGE Happend" << endl;        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 " + USBDisk);                }            }            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("插入设备 :" + strname);            }            break;        case DBT_DEVICEREMOVECOMPLETE://拔出设备            qDebug() << "设备移除" <<endl;            if(lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)            {                PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;                if(lpdbv->dbcv_flags == 0)                {                    //qDebug() << "USB_Removed";                    ui->textBrowser->append("USB_Remove");                }            }            if(lpdb->dbch_devicetype = DBT_DEVTYP_DEVICEINTERFACE)            {                PDEV_BROADCAST_DEVICEINTERFACE pDevInf  = (PDEV_BROADCAST_DEVICEINTERFACE)lpdb;                qDebug()<< "移除设备(name):" << pDevInf->dbcc_name;                //qDebug()<< "移除设备(guid):" << pDevInf->dbcc_classguid;                qDebug()<< "移除设备(size):" << pDevInf->dbcc_size;            }            break;        }    }    return false;}

0 0
原创粉丝点击