Qt获取系统串口信息
admin
2023-07-30 16:40:09
0

打开注册表

菜单-》运行

输入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  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);
    }


相关内容

热门资讯

一站式服务,新车上牌流程优化(... 人民网记者 申佳平为进一步便利新车上牌,工业和信息化部、公安部日前联合印发通知,全面推行国产小客车预...
霉霉的世纪婚礼,祝福没来,骂声... 作者 | 贺一 编辑 | 吴擎在《The Lucky One》中,泰勒·斯威夫特(Taylor Sw...
电视自动开关机是怎么回事 过压保护会导致电视自动关机。电视机的过压保护是由电视机开关电源的高电压引起的,因此,在维修时应该从电...
电视为什么会自动开关机 原因:电视机出现自动的开关机现象是比较常见的问题,一般引起电视机自动开关机的原因有很多,最常见的因素...
电视不停的黑屏闪 因为电源本身出现了问题,就会直接导致电视不停的黑屏闪;也有可能是因为电视机当中的AD板上面的高压板开...
冰箱显示f1是什么意思? 冰箱显示f1是什么意思?表示冰箱出现故障,其表现为为温度显示及温控按钮失灵,导致了冰箱的食品开始化冻...
冰箱后面带E是什么意思 表示冰箱传感器故障,其中E1代冷藏室传感器短路或断路,E2代表微冻室传感器短路故障,E3代表的是冷冻...
广西在呼救,“外面一片汪洋” 作者 | 肖瑶 编辑 | 张来7月6日中午11时23分,红棉在社交平台上发帖求助,希望有救援队能去广...
无人机视角直击广西六蓝水库溃坝 受“美莎克”影响,今天(6日)上午,广西南宁横州市六蓝水库、云表水库出现溃坝、垮坝险情,宾阳县六旺水...
峰会召开在即,土耳其多地爆发反... 当地时间7月7日至8日,北约峰会即将在土耳其首都安卡拉举行,届时将有32名盟国领导人以及北约伙伴国官...