1. 程式人生 > >Qt獲取可用串列埠號

Qt獲取可用串列埠號

主頁面標頭檔案新增:

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);
    }
///*獲取串列埠號相關