linux qt检测u盘热插拔,【QT】动态监测U盘插拔
前言
在项目中,遇到一个需求:需要动态监测U盘插入,自动读取U盘文件并打开。为了实现这个功能,我们可以使用RegisterDeviceNotification注册设备事件的通知,
然后在程序中处理WM_DEVICECHANGE消息来实现
步骤
RegisterDeviceNotification注册设备事件的通知
在QWidget中重新实现它的nativeEvent函数来接收处理WM_DEVICECHANGE消息
具体代码
bool GlobalUtil::registerDevNitification(QWidget *widget)
{
static const GUID GUID_DEVINTERFACE_LIST[] =
{
{ 0xA5DCBF10, 0x6530, 0x11D2,{ 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } },
{ 0x53f56307, 0xb6bf, 0x11d0,{ 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b } },
{ 0x4D1E55B2, 0xF16F, 0x11CF,{ 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } },
{ 0xad498944, 0x762f, 0x11d0,{ 0x8d, 0xcb, 0x00, 0xc0, 0x4f, 0xc3, 0x35, 0x8c } }
};
HDEVNOTIFY hDevNotify;
DEV_BROADCAST_DEVICEINTERFACE NotifacationFiler;
ZeroMemory(&NotifacationFiler, sizeof(DEV_BROADCAST_DEVICEINTERFACE));
NotifacationFiler.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
NotifacationFiler.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
for (int i = 0; i < sizeof(GUID_DEVINTERFACE_LIST) / sizeof(GUID); i++)
{
NotifacationFiler.dbcc_classguid = GUID_DEVINTERFACE_LIST[i];
hDevNotify = RegisterDeviceNotification((HANDLE)widget->winId(), &NotifacationFiler, DEVICE_NOTIFY_WINDOW_HANDLE);
if (!hDevNotify)
{
return false;
}
}
return true;
}
// 将需要处理WM_DEVICECHANGE消息的widget进行注册
GlobalUtil::registerDevNitification(widget);
// 在widget中重新实现nativeEvent函数
bool LoginWindow::nativeEvent(const QByteArray & eventType, void * message, long*result)
{
MSG* msg = reinterpret_cast(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_DEVICEINTERFACE)
{
m_callback++;
if (m_callback % 2 == 0)
{
// 具体的业务处理
}
}
break;
}
}
return false;
}
其他补充
看到上边,采用了一个m_callback标志位进行限制,这是因为U盘插入后,会连续发送两次WM_DEVICECHANGE消息,但我们业务处理只需要进行一次即可,因此通过该标志位进行限定
linux qt检测u盘热插拔,【QT】动态监测U盘插拔相关推荐
- linux下usb的热插拔监控,怎么linux下检测 usb摄像头热插拔事件
在linux下所有设备都是文件.所以对摄像头的操作其实就是对文件的操作.USB摄像头的设备文件就是在/dev目录下的video0(假如只有一个摄像头).在linux下操作摄像头就是使用v4l2对摄像头 ...
- 耳机驱动调试(插拔检测与按键检测)
耳机驱动调试(插拔检测与按键检测) 小白一枚,欢各位大佬指出错误 耳机类型判断 三段和四段.欧标和美标 现在许多设备的耳机接口都采用3.5mm的耳机接口,其中终端就是,终端可以兼容三段和四段耳机:三段 ...
- 计算机如何设置u盘图标,如何将U盘的图标改成自己喜欢的图案,程序员:这段代码拿去试试...
如今电脑已经成为了人们生活和工作中不可或缺的一个角色了,基本上家家户户都会配上一台电脑了,电脑的存在帮助我们提高了很大的工作效率,当工作中或者学习中需要传输一些文件的时候,有很多工具可以使用,而一般比 ...
- qt linux不能读写u盘文件,Qt读取U盘文件内容
欢迎大家关注.收藏,方便下次阅读! 之前想做的一个功能是读取U盘中的文件到系统磁盘目录下,今天抽空把简版功能实现了.那会儿一直搜索的Qt如何识别U盘,最终得到的结果是Qt检测U盘插拔,发现并不是我想要 ...
- Windows下使用Qt检测U盘插入和拔出的示例Demo程序
本文转载自Qt检测U盘插入拔出Demo 要做这个,要先知道Qt的QAbstractNativeEventFilter类,虚函数nativeEventFilter.这个类的主要作用是捕获全局window ...
- linux U盘插拔检测
因为最终要在tiny210上实现此功能,最终选择了hotplug. http://hi.baidu.com/hdy5200075/item/7751f48647f3d12a100ef3f6这里是hot ...
- Linux USB U盘热插拔挂载和卸载
一.硬件平台 1. 控制器:MT7620(A9内核) 2. RTC芯片:MCP7940 二.软件平台 1.开发环境:Ubuntu12.04 2.SDK内核包:MT7620 SDK软件开发包(Med ...
- Qt 嵌入式设备应用程序,通过U盘升级的一种思路
最近在做一个通过U盘升级的功能,程序是运行在ARM Linux Qt平台上的.这个应该是很多嵌入式设备必备的一个功能了,所以把这部分的实现抽出来,做成一个例子供需要的人参考.这只是U盘升级的一种思路, ...
- 树莓派linux编译不了动态库,linux系统下的树莓派与Qt 5.12.3源码的交叉编译
{写在前面:按照这个方法,基本可以成功在linux系统下交叉编译Qt5.12.3,其他版本的源码也编译} 我的环境:Linux Mint 19.1;树莓派 3;Qt源码5.12.3 当两个系统全部安装 ...
最新文章
- AdminStudio功能模块与版本信息总结
- TikTok又添劲敌 Meta元宇宙携Reels宣战
- Python 中 pass的使用
- ftp 文件服务器预览,web文件服务器 ftp 预览
- Ajax基本案例详解之$.get的实现
- [转] UML中关联、依赖、聚集等关系的异同
- ubuntu 在线安装最新交叉编译工具
- Java 根据 Map 的 key 的 ASCII 码从小到大排序
- 实时全局光照Screen Space Reflection (SSR)
- python转bat_bat 转换为python
- 微信小游戏跳一跳外挂辅助程序
- react 实现tab切换 三角形筛选样式
- 关于指令test ecx,ecx
- 网络硬件三剑客 - 集线器、交换机与路由器
- gulp4.0的坑:提示: Error: watching index.html: watch task has to be a function (optionally generated by u
- 查询7日内的展示数据
- 连推“一案一策”成都人工智能产业“换道超车
- 基于51单片机的宠物自动猫粮狗粮喂养机proteus仿真原理图PCB
- 捋一捋人工智能(AI)、机器学习(ML)、深度学习(DL)之间的关系
- 当下最受欢迎的编辑器,赶紧用起来!
热门文章
- 皮一皮:追忆我那随风逝去的阔腿裤...
- IDEA不能一个窗口管理多个项目?那是你不会用!
- Spring Cloud 常见面试题及答案
- Chrome 开发者工具的各种骚技巧
- 死磕Java并发:J.U.C之并发工具类:CountDownLatch
- html里range怎么改样式,CSS之修改input range样式 [ lion1ou ]
- explain mysql 调优_explain mysql性能优化
- java求数组中满足给定和的数对,【加试题】数组a中有50个互异的整数,已按升序排列。给定一个正整数key,寻找数组a中是否有一对数的和等于给定的数key,算法如下:...
- php操作mysql数据库的扩展有哪些_8.PHP操作MySQL数据库(Mysqli扩展)
- 平面法向量,点云法向量估计及可视化