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)相关推荐

  1. Windows下使用Qt检测U盘插入和拔出的示例Demo程序

    本文转载自Qt检测U盘插入拔出Demo 要做这个,要先知道Qt的QAbstractNativeEventFilter类,虚函数nativeEventFilter.这个类的主要作用是捕获全局window ...

  2. WINDOWS检测U盘插入,拔出

    检测U盘的插入或拔出状态,然后根据状态做出相关操作. 检测U盘是否被插入是通过监听WM_DEVICECHANGE消息来实现的. 判断-U盘拔出和插入-获取它盘符 2010-05-04 10:59 加入 ...

  3. WPF中检测U盘插入、拔出 实例

    类代码: /// <summary>/// 声明一个委托,用于代理一系列自定义方法/// </summary>public delegate void FlashDiskDel ...

  4. Qt检测U盘插入拔出Demo

    要做这个,要先知道Qt的QAbstractNativeEventFilter类,虚函数nativeEventFilter.这个类的主要作用是捕获全局windows消息. 先看一下效果: 基本注意以下两 ...

  5. VC++实时检测耳机的插入与拔出(附源码)

    目录 1.实现继承于IMMNotificationClient接口类的CMMNotificationClient类,实时感知音频设备变化的通知事件

  6. qt启动后检测u盘插入和拔掉

    工作中,需要检测u盘的插入和拔掉.其余逻辑可以简化. 查了半天,感谢@q62290798 链接在 https://blog.csdn.net/q62290798/article/details/115 ...

  7. android-检测耳机的插入和拔出动作

    在android系统中,检测耳机的插入和拔出,也是通过广播实现的,可以建立一个Broadcast Receiver 监听"android.intent.action.HEADSET_PLUG ...

  8. Qt C++ 检测优盘插入或拔出

    概述 在开发文件浏览相关应用时,会涉及到动态检测优盘插入或拔出的状态,这样可以实时的刷新界面显示.这里通过调用windows的接口来实现该检测,代码很简单.我是在Qt工程中使用的,其核心代码是一样的. ...

  9. linux udev 检测u盘的插入和拔出,在Linux中C检测插入/拔出USB串行设备

    我需要检测何时在我的嵌入式系统上插入或拔出USB串行设备,并知道与之相关的tty是什么. 我的系统运行在2.6 Linux内核上. 由于我没有对udev规则的写访问权限,现在我正在尝试从文件系统获取此 ...

最新文章

  1. 16. Logging 模块的配置与使用
  2. 分布式缓存之Memcache
  3. nginx缓存和flask_cache
  4. HttpClient工具类
  5. java哈希_Java如何采用哈希码实现分类(以员工分配为例)
  6. 【qduoj - 312】寻找唯一的萌妹(卡时)
  7. cdn节点人少延迟高_如何正确配置CDN高速缓存,避免越用越慢的尴尬
  8. InfoPath Resource Sites
  9. 龙格-库塔(Runge-Kutta)法解微分方程
  10. sdoi r1前的注意事项
  11. 20210314:力扣第 232 场周赛
  12. windows 命令行代理设置
  13. Android安全攻防战,反编译与混淆技术完全解析(下)
  14. python怎么同时对多行代码进行注释?
  15. linux 怎么改系统字体,linux系统终端修改字体的方法
  16. [图形学] 坐标系变换——从世界坐标系到相机坐标系
  17. 需求DNA检测:如何判断一个功能是否值得做
  18. 记录打卡假期的学习计划
  19. html点击按钮换css文件夹,按钮如何使用外部css样式
  20. 奇异值分解(SVD)详解及其应用

热门文章

  1. NuGet 的打包教程,使用UI工具 NuGetPackageExplorer 进行打包,处理包的依赖项
  2. 《工程伦理与学术道德》之《工程师的职业伦理》
  3. MySQL 行之间连接符_MySQL行转列 列转行 连接字符串 潍鲸 潍鲸科技
  4. 如何选择适合你的兴趣爱好(六十二),骑马
  5. 【Z50-70】拆机加内存注意
  6. 大学计算机基础知识实验报告,大学计算机基础实验实验报告
  7. html css文本框边框样式,HTML 学习笔记 CSS样式(边框)
  8. css设置文本超出两行 末尾用省略号表示
  9. 立夏吃什么水果蔬菜更健康科学
  10. 快速解决java中的容器