主页面头文件添加:
private:
///*获取串口号相关
QStringList m_listcomboName;
HKEY hKey;
LPCWSTR subkey;
wchar_t keyname[256]; //键名数组
char keyvalue[256]; //键值数组
DWORD keysize,type,valuesize;
int indexnum;
///*获取串口号相关
///*获取串口号相关
public:
QString getcomm(int index,QString keyorvalue); //读取键名
///*获取串口号相关
主界面cpp文件
1、添加getcomm函数定义:
///*获取串口号相关
QString MainWindow::getcomm(int index,QString keyorvalue)
//index为索引号,keyorvalue为选择返回值应该为key还是value
{
QString commresult;
if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"),0,KEY_READ,&hKey)!=0)
{
QString error="Cannotopenregedit!";//无法打开注册表时返回error
return error;
}//if(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0,KEY_READ,&hKey)!=0)
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 = keyname[i];
keymessage.append(message);
}//for(inti=0;i<=keysize;i++) 读取键名
for(int j=0;j<valuesize;j++)
{
if(keyvalue[j]!=0x00)
{
valuemessage.append(keyvalue[j]);
}
}//for(intj=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);//关闭注册表
}
///*获取串口号相关
2、主函数添加代码
///*获取串口号相关
QString path="HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM\\";
QSettings * settings = new QSettings(path,QSettings::NativeFormat);
QStringList key = settings->allKeys();
int num=(int)key.size();
QString value;
for(int i=0;i<num;i++)
{
value = getcomm(i,"value");
m_listcomboName<<value;
//添加文本浏览器textBrowser中
ui->textBrowser->insertPlainText(value+"\r\n");
//添加到下拉选择框portNameComboBox中
ui->portNameComboBox->addItem(value);
}
///*获取串口号相关
参考链接:
http://blog.csdn.net/cliffordl/article/details/14450469