Qt獲取可用串列埠號
阿新 • • 發佈:2019-01-03
主頁面標頭檔案新增:
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);
}
///*獲取串列埠號相關