利用 Qt 4.1.0 讀取注冊表獲得串口信息
利用 Qt 4.1.0 讀取注冊表獲得串口信息是本文要介紹的內(nèi)容,內(nèi)容不多,用代碼解決實際問題,先來看內(nèi)容!前段時間做串口開發(fā),想做自動掃描串口設(shè)備功能 遇到問題現(xiàn)在終于解決程序?qū)懙貌皇呛芎?,功能實現(xiàn)了。按照此方法應(yīng)該能夠掃描到其他硬件。
我遇到的問題:
使用QSettings時 對于注冊表中串口信息中的 \Device\Serial0 這種key值 無法找到其value 是 \ 斜杠問題。
解決方法是 首先調(diào)用:
- QString path="HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM";
- QSettings *settings=new QSettings(path,QSettings::NativeFormat);
- QStringList key=settings->allKeys();
- int num=(int)key.size();
得到注冊表中有多少個串口設(shè)備
然后使用win api得到 key 和 value 程序源碼如下:QString getcomm(int index,QString keyorvalue)返回key 或者 value
.h文件
- #ifndef READCOM_H
- #define READCOM_H
- #include <QMessageBox>
- #include <qt_windows.h>
- #include <QtGui/QMainWindow>
- class Readcom
- {
- public:
- Readcom();
- ~Readcom();
- private:
- HKEY hKey;
- LPCWSTR subkey;
- wchar_t keyname[256]; //鍵名數(shù)組
- char keyvalue[256]; //鍵值數(shù)組
- DWORD keysize,type,valuesize;
- int indexnum;
- public:
- QString getcomm(int index,QString keyorvalue); //讀取鍵名
- //QString getvalue(int index);//讀取鍵值
- };
- #endif // READCOM_H
.cpp 文件
- #include "readcom.h"
- Readcom::Readcom()
- {
- }
- Readcom::~Readcom()
- {
- }
- QString Readcom::getcomm(int index,QString keyorvalue)
- {
- QString commresult="";
- QString strkey="HARDWARE\\DEVICEMAP\\SERIALCOMM";//子鍵路徑
- subkey=strkey.ucs2();//類型轉(zhuǎn)換
- if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_READ,&hKey)!=0)
- {
- QString error="Cannot open regedit!";//無法打開注冊表時返回error
- return error;
- }//if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_READ,&hKey)!=0)
- QString keymessage="";//鍵名
- QString message="";
- QString valuemessage="";//鍵值
- indexindexnum=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=keyname;
- keymessage.append(message);
- }// for(int i=0;i<=keysize;i++) 讀取鍵名
- for(int j=0;j<valuesize;j++)
- {
- if(keyvalue[j]!=0x00)
- { valuemessage.append(keyvalue[j]);}
- }//for(int j=0;j<valuesize;j++) 讀取鍵值
- if(keyorvalue=="key")
- {
- commresult=keymessage;
- }
- if(keyorvalue=="value")
- {
- commresult=valuemessage;
- }
- }
- else
- {
- commresult="nokey";
- } //if(::RegEnumValue(hKey,indexnum,keyname,&keysize,0,&type,(BYTE*)keyvalue,&valuesize)==0) 列舉鍵名和值
- return commresult;
- ::RegCloseKey(hKey);//關(guān)閉注冊表
- }
小結(jié):利用 Qt 4.1.0 讀取注冊表獲得串口信息的內(nèi)容介紹完了,希望本文對你有所幫助,更多內(nèi)容請參考編輯推薦!