Qt获取系统串口信息
2023-09-14 09:05:10 时间
打开注册表
菜单-》运行
输入regedit
到目录
HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM\\
中,该目录下有的com口表示系统当前存在的com
//获取系统串口注册表中index索引位置的键名或键值
//QString为value字符串时为获取键值,键值即com名
QString getcomm(int index, QString keyorvalue)
{
QString commresult = "";
QString strkey = "HARDWARE\\DEVICEMAP\\SERIALCOMM";//子键路径
int a = strkey.toWCharArray(subkey);
subkey[a] = L'\0';
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkey, 0, KEY_READ|KEY_QUERY_VALUE, &hKey) != 0 )
{
QMessageBox::question(NULL, QString("错误"), QString("注册表打开失败\r\n请检查注册表路径是否正确!"));
}
QString keymessage = "";//键名
QString message = "";
QString valuemessage = "";//键值
indexnum = index;//要读取键值的索引号
keysize = sizeof(keyname);
valuesize = sizeof(keyvalue);
if ( ::RegEnumValue(hKey, indexnum, keyname, &keysize, 0, &type, (BYTE*)keyvalue, &valuesize) == 0 )
{
//读取键名
//for (int i = 0; i <keysize; i++)
{
message = QString::fromStdWString(keyname);
keymessage.append(message);
}
//读取键值
for (int j = 0; j < valuesize; j++)
{
if (keyvalue[j] != 0x00 )
{
valuemessage.append(keyvalue[j]);
}
}
if ( keyorvalue == "key" )
{
commresult = keymessage;
}
if ( keyorvalue == "value" )
{
commresult = valuemessage;
}
}
else
{
commresult = "nokey";
}
::RegCloseKey(hKey); //关闭注册表
return commresult;
}
//系统存在串口以及其他所有串口放入到comboxcomlist列表中
void init_comlist(void)
{
QString path = "HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM";
QSettings *settings = new QSettings(path, QSettings::NativeFormat);
QStringList key = settings->allKeys();
//系统注册表中com存在的个数
int comkeycount = key.size();
//qDebug() << comkeycount << key; //2 ("/Device/Serial0", "/Device/VCP0")
regcomlist.clear();
comboxcomlist.clear();
for ( int i = 0; i < comkeycount; i++ )
{
//将注册表中有的com名字放入列表中
//qDebug() << getcomm(i, "key");
regcomlist << getcomm(i, "value");
//qDebug() << regcomlist.value(i);
}
qDebug() << regcomlist;
qDebug() << create_user_virtual_comlist;
qDebug() << create_private_virtual_comlist;
//两种情况,第一种,系统注册表此时有虚拟串口的信息,那么要将保存系统注册表中串口信息的regcomlist列表中删除掉虚拟串口,create_user_virtual_comlist,create_private_virtual_comlist已经保存了上次的虚拟串口列表
//for ( int i = 0; create_user_virtual_comlist; )
//第二种,系统注册表此时没有虚拟串口信息,只有本机串口信息,那么就不需要删除
bool findflag = false;
for ( int i = 0; i < MOST_VIRTUAL_COM_NUM; i++ )//combox组件中添加255个com
{
findflag = false;
//遍历保存注册表中com的列表
for ( int j = 0 ; j < comkeycount; j++ )
{
if ( QString::compare(regcomlist.value(j), QString("COM%1").arg(i + 1)) == 0 )
{
comboxcomlist << QString(regcomlist.value(j) + QString(" (本机)"));
findflag = true;
break;
}
}
if ( findflag == true )
continue;
comboxcomlist << QString("COM%1").arg(i + 1);
}
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
相关文章
- Qt中QMap键值对基本用法(键值对)
- Qt编写安防视频监控系统1-通道切换
- SM2 (含SM3、SM4)国密算法工具QT版,彻底搞懂sm2算法的使用
- qt运行cmd命令_cmd ping大包命令
- qt交叉编译环境搭建_qt socket
- C/C++ Qt 编译打包项目
- 如何在Linux系统中安装Qt开发环境(linux下qt安装教程)
- Qt元对象和属性系统详解
- Linux下编译Qt程序的技术指南(linux编译qt程序)
- 开发Qt在Linux平台开发:新技术与新体验(qtlinux)
- 开发基于Linux平台的Qt程序开发实践(linuxqt程序)
- 版本Qt终于发布了Linux版本(qt发布linux)
- Linux Qt 应用部署实践指南(linuxqt部署)
- Linux 下 Qt 调试技巧(qt调试linux)
- Linux系统下Qt构建帮助文档(linuxqt帮助文档)
- Linux下的Qt编译器之旅(qt编译器linux)
- qt实现mysql远程连接:快速入门指南(qt远程连接mysql)
- 「零基础入门」Linux下安装QT教程,助力程序员成为高手!(linux下安装qt教程)
- 利用Linux系统和QT技术实现高效嵌入式应用程序开发(linux嵌入式qt)
- 从零开始:Qt 编译在 Linux 上的指南(qt编译linux)
- Linux 下 Qt 安装教程(qt安装教程linux)
- 深入浅出:Qt在嵌入式Linux中的开发(qt嵌入式linux)
- Linux Qt窗口:快速构建你的GUI界面(linux qt 窗口)
- Qt 5 与 MySQL 数据库联合使用:简单高效的开发实践(qt 5 mysql)
- Linux嵌入式应用Qt快速开发指南(linux嵌入式qt)
- Qt下Linux命令实现快速开发(qtlinux命令)
- Qt在Linux系统中的优秀中文实现(qtlinux中文)
- Redis与Qt实现完美连接(redis连接qt)