利用 Qt 4.1.0 读取注册表获得串口信息

利用 Qt 4.1.0 读取注册表获得串口信息是本文要介绍的内容,内容不多,用代码解决实际问题,先来看内容!前段时间做串口开发,想做自动扫描串口设备功能 遇到问题现在终于解决程序写得不是很好,功能实现了。按照此方法应该能够扫描到其他硬件。

我遇到的问题:

使用QSettings时 对于注册表串口信息中的 \Device\Serial0 这种key值 无法找到其value 是 \ 斜杠问题。

解决方法是 首先调用:

 
 
  1. QString path="HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM";  
  2. QSettings *settings=new QSettings(path,QSettings::NativeFormat);  
  3. QStringList key=settings->allKeys();  
  4. int num=(int)key.size(); 

得到注册表中有多少个串口设备

然后使用win api得到 key 和 value 程序源码如下:QString  getcomm(int index,QString keyorvalue)返回key  或者 value
                                                                                                                     
.h文件

 
 
  1. #ifndef READCOM_H  
  2. #define READCOM_H  
  3. #include <QMessageBox> 
  4. #include <qt_windows.h> 
  5. #include <QtGui/QMainWindow> 
  6. class Readcom  
  7. {  
  8. public:  
  9.     Readcom();  
  10.     ~Readcom();  
  11. private:      
  12.      HKEY hKey;  
  13.     LPCWSTR subkey;  
  14.     wchar_t keyname[256]; //键名数组  
  15.      char keyvalue[256];  //键值数组  
  16.      DWORD keysize,type,valuesize;  
  17.     int indexnum;  
  18. public:  
  19.      QString getcomm(int index,QString keyorvalue); //读取键名  
  20.      //QString getvalue(int index);//读取键值  
  21.     };  
  22. #endif // READCOM_H 

.cpp 文件

 
 
  1. #include "readcom.h"  
  2. Readcom::Readcom()      
  3. {  
  4. }  
  5. Readcom::~Readcom()  
  6. {  
  7. }  
  8. QString Readcom::getcomm(int index,QString keyorvalue)  
  9. {    
  10.     QString commresult="";  
  11.     QString strkey="HARDWARE\\DEVICEMAP\\SERIALCOMM";//子键路径  
  12.     subkey=strkey.ucs2();//类型转换  
  13.     if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_READ,&hKey)!=0)  
  14.      {  
  15.          QString error="Cannot open regedit!";//无法打开注册表时返回error  
  16.          return error;  
  17.        }//if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_READ,&hKey)!=0)  
  18.   QString keymessage="";//键名  
  19.   QString message="";  
  20.   QString valuemessage="";//键值  
  21.   indexindexnum=index;//要读取键值的索引号  
  22.     keysize=sizeof(keyname);  
  23.     valuesize=sizeof(keyvalue);  
  24.      if(::RegEnumValue(hKey,indexnum,keyname,&keysize,0,&type,(BYTE*)keyvalue,&valuesize)==0)//列举键名和值  
  25.       {      
  26.            for(int i=0;i<keysize;i++)      
  27.              {   
  28.                  message=keyname;  
  29.                  keymessage.append(message);  
  30.                }// for(int i=0;i<=keysize;i++)    读取键名  
  31.            for(int j=0;j<valuesize;j++)  
  32.                {  
  33.                  if(keyvalue[j]!=0x00)   
  34.                  { valuemessage.append(keyvalue[j]);}  
  35.                }//for(int j=0;j<valuesize;j++) 读取键值  
  36.            if(keyorvalue=="key")  
  37.              {  
  38.                commresult=keymessage;  
  39.              }  
  40.            if(keyorvalue=="value")  
  41.              {  
  42.                commresult=valuemessage;  
  43.              }  
  44.      }  
  45.      else  
  46.      {  
  47.          commresult="nokey";  
  48.      } //if(::RegEnumValue(hKey,indexnum,keyname,&keysize,0,&type,(BYTE*)keyvalue,&valuesize)==0) 列举键名和值  
  49.  
  50.   return commresult;  
  51. ::RegCloseKey(hKey);//关闭注册表  

小结:利用 Qt 4.1.0 读取注册表获得串口信息的内容介绍完了,希望本文对你有所帮助,更多内容请参考编辑推荐!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值