QT:检测U盘插入和拔出(windows)
1、先检测驱动器;
2、可以使用GetDriveType函数来获取驱动器的类型,以下是函数的链接;
https://docs.microsoft.com/zh-cn/windows/win32/api/fileapi/nf-fileapi-getdrivetypea?redirectedfrom=MSDN
3、通过数量变化来判断插入或者移除。
关键代码
/*******************************************************
* @brief -
* @author xiaolei
* @copyright -
* @version V1.0
* @data 2019-11-19
* @note 1、检测盘符
* @note 2、判断是否插入/移除移动驱动器
* @note 3、没有获取设备ID,因此不知道删除的是哪个设备?
* @note -
*******************************************************/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <windows.h>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);QFileInfoList list = QDir::drives(); //获取当前系统的盘符qDebug()<<"驱动器数量: "<<list.count();driver_number=list.count();for(int i=0;i<list.count();++i){UINT driver_type = GetDriveType((WCHAR *) list[i].filePath().utf16());switch (driver_type) {case 0:qDebug()<<list[i].filePath()<<" "<<driver_type<<" 驱动类型不能确定";break;case 1:qDebug()<<list[i].filePath()<<" "<<driver_type<<" 根路径无效";break;case 2:qDebug()<<list[i].filePath()<<" "<<driver_type<<" 可移动驱动器:软盘驱动器,拇指驱动器或闪存卡读取器";removable_number++;break;case 3:qDebug()<<list[i].filePath()<<" "<<driver_type<<" 固定驱动器:硬盘驱动器或闪存驱动器";break;case 4:qDebug()<<list[i].filePath()<<" "<<driver_type<<" 远程(网络)驱动器";break;case 5:qDebug()<<list[i].filePath()<<" "<<driver_type<<" CD-ROM驱动器";break;case 6:qDebug()<<list[i].filePath()<<" "<<driver_type<<" RAM磁盘";break;default:break;}}timer=new QTimer(this);timer->start(3000);connect(timer,&QTimer::timeout,this,&MainWindow::detectDriver);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::detectDriver()
{QFileInfoList list = QDir::drives(); //获取当前系统的盘符int temp_number=0;std::vector<UINT> driver_types;for(int i=0;i<list.count();++i){UINT driver_type = GetDriveType((WCHAR *) list[i].filePath().utf16());driver_types.push_back(driver_type);switch (driver_type) {case 0://qDebug()<<list[i].filePath()<<" "<<driver_type<<" 驱动类型不能确定";break;case 1://qDebug()<<list[i].filePath()<<" "<<driver_type<<" 根路径无效";break;case 2:temp_number++;//qDebug()<<list[i].filePath()<<" "<<driver_type<<" 可移动驱动器:软盘驱动器,拇指驱动器或闪存卡读取器";break;case 3://qDebug()<<list[i].filePath()<<" "<<driver_type<<" 固定驱动器:硬盘驱动器或闪存驱动器";break;case 4://qDebug()<<list[i].filePath()<<" "<<driver_type<<" 远程(网络)驱动器";break;case 5://qDebug()<<list[i].filePath()<<" "<<driver_type<<" CD-ROM驱动器";break;case 6://qDebug()<<list[i].filePath()<<" "<<driver_type<<" RAM磁盘";break;default:break;}}if(temp_number>removable_number){qDebug()<<"驱动器数量: "<<list.count();qDebug()<<"插入可移动驱动器!!!";}else if(temp_number==removable_number){//qDebug()<<"未插入/移除可移动驱动器!!!";}else if(temp_number<removable_number){qDebug()<<"驱动器数量: "<<list.count();qDebug()<<"移除可移动驱动器!!!";}removable_number=temp_number;driver_number=list.count();
}
QT:检测U盘插入和拔出(windows)相关推荐
- Windows下使用Qt检测U盘插入和拔出的示例Demo程序
本文转载自Qt检测U盘插入拔出Demo 要做这个,要先知道Qt的QAbstractNativeEventFilter类,虚函数nativeEventFilter.这个类的主要作用是捕获全局window ...
- WINDOWS检测U盘插入,拔出
检测U盘的插入或拔出状态,然后根据状态做出相关操作. 检测U盘是否被插入是通过监听WM_DEVICECHANGE消息来实现的. 判断-U盘拔出和插入-获取它盘符 2010-05-04 10:59 加入 ...
- WPF中检测U盘插入、拔出 实例
类代码: /// <summary>/// 声明一个委托,用于代理一系列自定义方法/// </summary>public delegate void FlashDiskDel ...
- Qt检测U盘插入拔出Demo
要做这个,要先知道Qt的QAbstractNativeEventFilter类,虚函数nativeEventFilter.这个类的主要作用是捕获全局windows消息. 先看一下效果: 基本注意以下两 ...
- VC++实时检测耳机的插入与拔出(附源码)
目录 1.实现继承于IMMNotificationClient接口类的CMMNotificationClient类,实时感知音频设备变化的通知事件
- qt启动后检测u盘插入和拔掉
工作中,需要检测u盘的插入和拔掉.其余逻辑可以简化. 查了半天,感谢@q62290798 链接在 https://blog.csdn.net/q62290798/article/details/115 ...
- android-检测耳机的插入和拔出动作
在android系统中,检测耳机的插入和拔出,也是通过广播实现的,可以建立一个Broadcast Receiver 监听"android.intent.action.HEADSET_PLUG ...
- Qt C++ 检测优盘插入或拔出
概述 在开发文件浏览相关应用时,会涉及到动态检测优盘插入或拔出的状态,这样可以实时的刷新界面显示.这里通过调用windows的接口来实现该检测,代码很简单.我是在Qt工程中使用的,其核心代码是一样的. ...
- linux udev 检测u盘的插入和拔出,在Linux中C检测插入/拔出USB串行设备
我需要检测何时在我的嵌入式系统上插入或拔出USB串行设备,并知道与之相关的tty是什么. 我的系统运行在2.6 Linux内核上. 由于我没有对udev规则的写访问权限,现在我正在尝试从文件系统获取此 ...
最新文章
- 16. Logging 模块的配置与使用
- 分布式缓存之Memcache
- nginx缓存和flask_cache
- HttpClient工具类
- java哈希_Java如何采用哈希码实现分类(以员工分配为例)
- 【qduoj - 312】寻找唯一的萌妹(卡时)
- cdn节点人少延迟高_如何正确配置CDN高速缓存,避免越用越慢的尴尬
- InfoPath Resource Sites
- 龙格-库塔(Runge-Kutta)法解微分方程
- sdoi r1前的注意事项
- 20210314:力扣第 232 场周赛
- windows 命令行代理设置
- Android安全攻防战,反编译与混淆技术完全解析(下)
- python怎么同时对多行代码进行注释?
- linux 怎么改系统字体,linux系统终端修改字体的方法
- [图形学] 坐标系变换——从世界坐标系到相机坐标系
- 需求DNA检测:如何判断一个功能是否值得做
- 记录打卡假期的学习计划
- html点击按钮换css文件夹,按钮如何使用外部css样式
- 奇异值分解(SVD)详解及其应用