在windows平台下获取U盘信息,可以调用windows API函数比较方便。本来想用qt
QDBusConnection 来写的,网上关于这方面的代码比较多,但按照提示的步骤来写的就是无法编译,我也不知道为什么。如果有知道的朋友,留言给我或者qq 1585519210联系
在windows平台下U盘检测采用windows事件来设计,废话少说,上代码!
在windows平台下U盘检测采用windows事件来设计,废话少说,上代码!
#ifndef GETUSBDISKWIDGET_H
#define GETUSBDISKWIDGET_H
#include <QWidget>
#include <windows.h>
#include <winbase.h>
#include <winnls.h>
#include <dbt.h>
#include <QCoreApplication>
#include <QDebug>
#include <QString>
#include <QVector>
#include <QStringList>
namespace Ui {
class GetUsbDiskWidget;
}
typedef struct USB_DISK_INFO
{
QString DirPath;
float TotalMemory;
float FreeMemory;
}USB_DISK_INFO;
class GetUsbDiskWidget : public QWidget
{
Q_OBJECT
public:
explicit GetUsbDiskWidget(QWidget *parent = 0);
~GetUsbDiskWidget();
void Init();
void ScanHD();
void AddDisk(QString &DiskName);
void DeleteDisk(QString &DiskName);
bool SearchDisk(QString &DiskName,int &iter);
void GetMemorySize(USB_DISK_INFO & disk);
void AddComboBoxItem(QString &item);
void DeleteComboBoxItem(QString &item);
bool winEvent(MSG *message, long *result);
char FirstDriveFromMask (ULONG unitmask);
USB_DISK_INFO GetCheckedDisk();
private:
Ui::GetUsbDiskWidget *ui;
QVector<USB_DISK_INFO> usb_disk_info;
USB_DISK_INFO CurrentUseDisk;
private slots:
void on_comboBox_USB_currentIndexChanged(QString );
};
#endif // GETUSBDISKWIDGET_H
#include "getusbdiskwidget.h"
#include "ui_getusbdiskwidget.h"
#include <QTextCodec>
GetUsbDiskWidget::GetUsbDiskWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::GetUsbDiskWidget)
{
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("gb18030"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("gb18030"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
ui->setupUi(this);
this->Init();
}
GetUsbDiskWidget::~GetUsbDiskWidget()
{
delete ui;
}
//=================================================================================
//系统初始化
//=================================================================================
void GetUsbDiskWidget::Init()
{
this->ScanHD();
ui->comboBox_USB->clear();
this->usb_disk_info.clear();
}
//=======================================================&#