QT在Windows下检测USB设备热拔插的思路

本文介绍了使用QT在Windows下实时检测USB摄像头和麦克风拔插的方法,涉及Windows API和设备管理。通过注册设备通知、处理设备事件及解析设备接口类,实现设备插入和移除的识别,特别是针对USB摄像头的检测。
摘要由CSDN通过智能技术生成

一、问题描述:

使用QT开发视频会议时需要实现实时检测USB摄像头/麦克风拔插的功能,这里主要涉及到对一些Windows API的了解以及windows系统的设备管理识别不同种设备时的原理,在实现过程中主要参考了以下两篇文章以及微软开发手册。

监测硬件的插入或者拔除https://www.codeproject.com/Articles/14500/Detecting-Hardware-Insertion-and-or-Removal      Windows下检测usb设备拔插的demohttps://blog.csdn.net/explorer114/article/details/50563051

本文将着重讲解windows识别设备所需的基础概念和原理以及在实现过程中对于上述参考文章需要修改的地方。

二、基本概念

1.windows下常见的设备类型有哪些?

从图2-1 设备管理器的截图中,我们可以看到常见的设备类型有监视器,键盘,鼠标,音频输入和输出,照相机等等,然后我们点击其中一个设备类型就可以看见下面具体连接的设备。

图2-1 设备管理器

2.windows是如何归类一个设备和标识一个设备类型的呢?

    微软提出一个概念叫做设备安装类(Setup Class),为了简化设备的安装过程,windows会将以相同方式设置和配置的设备分组为一个设备安装类,比如,windows将所有的网卡(PCI网卡/无线网卡/外接USB网卡)都归到网络适配器一类。为了区分不同的设备安装类,每一个设备安装类都关联了一个GUID,系统定义的安装类Guid是在devguid.h中定义的,并且通常具有GUID_DEVCLASS_Xxx的格式的符号名称。具体可以参考下面微软官方的解释。

Overview of Device Setup Classes - Windows drivers | Microsoft DocsOverview of Device Setup Classeshttps://docs.microsoft.com/en-us/windows-hardware/drivers/install/overview-of-device-setup-classes从图2-2 devguid.h中我们可以看到所有设备安装类的guid,比如电池设备,蓝牙设备的guid等等,在注册表路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class  下可以查看到设备安装类GUID

                                                         图  2-2 devguid.h   

     还有一个与之相对应的概念叫做设备接口类(Device Interface Class),顾名思义,设备对外的接口,用于设备的管理和访问操作,系统对设备的状态进行跟踪

      驱动程序可以注册一个设备接口类,然后向每个可能向其发送用户模式I/O请求的设备对象启用该类的实例当驱动程序注册设备接口类的实例时,I/O管理器将设备和设备接口类GUID与符号链接名称相关。符号链接名称存储在注册表中,使用该接口的应用程序可以查询该接口的实例并接收表示支持该接口的设备的符号链接名称,然后应用程序就可以使用符号链接名称作为I/O请求的目标。

     每个设备接口类都与一个GUID相关联。系统在设备特定的头文件中为通用设备接口类定义GUID,供应商可以创建额外的设备接口类。例如,三种不同类型的鼠标

QT中,可以使用QProcess类来监控USB设备拔情况。首先,你需要包含QProcess和QCoreApplication头文件,并定义一个usbCount函数来获取USB设备的数量。在usbCount函数中,你可以使用QProcess启动lsusb命令,并通过readAllStandardOutput函数获取命令的输出结果。然后,你可以根据输出结果的行数来判断系统中插入了多少个USB设备。在主函数中,你可以使用一个循环来不断监测USB设备拔情况。具体的代码实现可以参考\[1\]和\[2\]的引用内容。此外,你还可以参考\[3\]中的链接获取更多关于监测硬件插入或拔除的信息。 #### 引用[.reference_title] - *1* *2* [用50行代码实现Linux系统usb设备检测(基于Qt的神技能)](https://blog.csdn.net/iamdbl/article/details/127404280)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [QTWindows检测USB设备热拔思路](https://blog.csdn.net/qq_39304481/article/details/122805968)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值