900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Qt检测U盘

Qt检测U盘

时间:2023-03-22 13:20:42

相关推荐

Qt检测U盘

原理:

通过检测Widget::winEvent(MSG *msg, long *result),当pc上有U盘插拔时,会自动触发这个函数。通过检测此消息是否是WM_DEVICECHANGE就可以

代码:

#include <windows.h>

#include <QMainWindow>

#include <dbt.h>

#include <QString>

#include <QDebug>

private:

char FirstDriveFromMask (ULONG unitmask);

protected:

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

char MainWindow::FirstDriveFromMask(ULONG unitmask)

{

char i;

for (i = 0; i < 26; ++i)

{

if (unitmask & 0x1)

break;

unitmask = unitmask >> 1;

}

return (i + 'A');

}

bool MainWindow::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_VOLUME)

{

PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;

if(lpdbv->dbcv_flags ==0)

{

QString USBDisk = QString(this->FirstDriveFromMask(lpdbv ->dbcv_unitmask));

qDebug() << "USB_Arrived and The USBDisk is: "<<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)

{

qDebug() << "USB_Removed";

}

}

break;

}

}

return false;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。