windows开发--QT主动监测U盘是否插入

关于U盘的监测有两种方式,一种是主动监测,另一种是U盘插拔时被动接收事件并处理,两种不同的方式使用场景不同。本文主要介绍在windows系统下主动监测U盘的方法。

接口介绍

该方法主要调用Windows.h头文件中的相应接口函数:

1、GetLogicalDriveStrings() 获取相关磁盘的磁盘号
原型: WINBASEAPI DWORD WINAPI GetLogicalDriveStringsW (DWORD nBufferLength, LPWSTR lpBuffer);
其中lpBuffer的数据格式为: A:\NULLB:\NULLC:\NULL 每个磁盘名称占用4个字节
2、GetDriveType() 根据磁盘名判断磁盘类型,用来区分是否是U盘
原型:  WINBASEAPI UINT WINAPI GetDriveTypeW (LPCWSTR lpRootPathName);

实现原理

获取所有的磁盘名称,针对每个磁盘获取对应的类型,判断是否是U盘。

代码

#include <Windows.h>
#include <fileapi.h>
#include <qdebug.h>
void diskDetect()
{
	// 获取磁盘字符串总长度 stringLen 
    size_t stringLen = GetLogicalDriveStrings(0, NULL);
    size_t diskNameLen = 4;
    size_t diskNum = stringLen / diskNameLen;
    char *drvString = new char[stringLen];
    // 获取磁盘字符串并保存到 drvString
    GetLogicalDriveStrings(stringLen, (LPTSTR)drvString); // drvString内部保存的数据是A:\NULLB:\NULLC:\NULL

    for (size_t i = 0; i < diskNum ; ++i) {
        char dir[] = { drvString[i * diskNameLen],':','\\' };
        size_t diskType = GetDriveType((LPCWSTR)(drvString + i * diskNameLen));
        if (diskType == DRIVE_REMOVABLE) {
            qDebug()<<"find disk is :"<<dir[0]<<endl;
            return ;
        }
    }

    qDebug()<<"Not found Any UDisk\n";
}

int main(int argc, char *argv[])
{
    diskDetect();
    int a;
    scanf("%d", &a); // 阻塞程序结束
    return 0;
}

相关链接

[1] 教程二:windows api(c mfc vs2017)实现U盘插拔检测,获取U盘容量,U盘内容移动,开启和关闭U盘以及获取盘符等

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值