当前位置: 首页 > article >正文

C++ Qt 识别U盘/串口

头文件:

#include <Windows.h> // 包含 Windows API 头文件
#include <Dbt.h> // 包含设备通知相关的头文件

识别U盘:

//.h
bool nativeEvent(const QByteArray &eventType,
    void *message,
    long *result) override;
bool nativeEvent(const QByteArray &eventType,
  void *message,
  long *result)
{
  Q_UNUSED(eventType)
    MSG* msg = (MSG*)message;
  if (msg->message == WM_DEVICECHANGE)
  {
    if (msg->wParam == DBT_DEVICEARRIVAL)
    {
      PDEV_BROADCAST_HDR devHdr = (PDEV_BROADCAST_HDR)msg->lParam;
      if (devHdr->dbch_devicetype == DBT_DEVTYP_VOLUME)
      {
        //U盘插入, 更新驱动器列表
       
      }
      *result = 0;
    }
    else if (msg->wParam == DBT_DEVICEREMOVECOMPLETE)
    {
      PDEV_BROADCAST_HDR devHdr = (PDEV_BROADCAST_HDR)msg->lParam;
      if (devHdr->dbch_devicetype == DBT_DEVTYP_VOLUME)
      {
        //U盘拔出, 更新驱动器列表
        
      }
      *result = 0;
    }
  }
  return false;//返回false表明该消息接着向下传递,以便其它应用处理该消息。
}

识别虚拟串口:

//.h
bool handleVirtualSerialPortEvent(MSG* msg, long* result);
bool nativeEvent(const QByteArray &eventType,
    void *message,
    long *result) override;
bool handleVirtualSerialPortEvent(MSG* msg, long* result)
{
  if (msg->message == WM_DEVICECHANGE)
  {
    if (msg->wParam == DBT_DEVICEARRIVAL)
    {
      PDEV_BROADCAST_HDR devHdr = (PDEV_BROADCAST_HDR)msg->lParam;
      if (devHdr->dbch_devicetype == DBT_DEVTYP_PORT)
      {
        // 处理虚拟串口插入事件
      }
      *result = 0;
    }
    else if (msg->wParam == DBT_DEVICEREMOVECOMPLETE)
    {
      PDEV_BROADCAST_HDR devHdr = (PDEV_BROADCAST_HDR)msg->lParam;
      if (devHdr->dbch_devicetype == DBT_DEVTYP_PORT)
      {
        // 处理虚拟串口拔出事件
      }
      *result = 0;
    }
    else if (msg->wParam == DBT_DEVNODES_CHANGED)
    {
      // 处理虚拟串口节点变化事件,如果串口连接,可能会不触发拔出事件
      
      *result = 0;
    }
  }
  return false;
}

bool nativeEvent(const QByteArray &eventType, void *message, long *result)
{
  Q_UNUSED(eventType)
    MSG* msg = (MSG*)message;
  return handleVirtualSerialPortEvent(msg, result);
}

获取更多Linux C/C++资料


http://www.kler.cn/a/409380.html

相关文章:

  • 如何选择服务器
  • 8、深入剖析PyTorch的state_dict、parameters、modules源码
  • Python爬虫项目 | 二、每日天气预报
  • repmgr安装及常用运维指令
  • 搜索插入位置
  • Shiro-550反序列化漏洞分析
  • 传输控制协议(TCP)和用户数据报协议(UDP)
  • ODBC连接PostgreSQL数据库后,网卡DOWN后,客户端进程阻塞问题解决方法
  • 无法加载文件 C:\dev\nodejs\cnpm.ps1,因为在此系统上禁止运行脚本。问题解决
  • 用java和redis实现考试成绩排行榜
  • RabbitMQ 之 死信队列
  • 基于Python Web的社区爱心养老管理系统设计与实现
  • Mysql的加锁情况详解
  • [ubuntu]编译共享内存读取出现read.c:(.text+0x1a): undefined reference to `shm_open‘问题解决方案
  • VUE3 默认下载某个文件
  • 蓝桥杯嵌入式再学习理解
  • MySQL中索引全详解
  • windows C#-异步文件访问
  • python 什么是数据类dataclass,以及它的应用场景
  • 论文阅读--Evidence for the utility of quantum computing before fault tolerance
  • 跟我学OceanBase4.0 --阅读白皮书 (0.5-4.0的架构与之前架构特点)
  • 人工智能之机器学习5-回归算法2【培训机构学习笔记】
  • 【Rabbitmq篇】RabbitMQ⾼级特性----持久性,发送⽅确认,重试机制
  • Kafka 生产者优化与数据处理经验
  • MySQL-学习笔记
  • 【npm设置代理-解决npm网络连接error network失败问题】