在项目中选择串口号的方法

来源:互联网 发布:淘宝母婴用品货源 编辑:程序博客网 时间:2024/06/07 22:08

在项目中用到的,用于枚举系统注册表中记录的所有串口号,该方法好像无法查询到虚拟的串口,

以下这些代码均可以在网络上找到,现在自己只不过将其整理下,免得下次用还得重新查找。

INT_PTRCCOMSET::GetSerialPort(CStringArray &arrCom){arrCom.RemoveAll();HKEYhkey;LONG32lRes = RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\DEVICEMAP\\SERIALCOMM"),NULL,KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS|KEY_READ,&hkey);if (lRes == ERROR_SUCCESS){TCHARtchKey[MAX_PATH];TCHARtchValue[20];DWORDdwIndex = 0;DWORDdwType = REG_SZ;while(lRes == ERROR_SUCCESS){DWORDdwCnt = MAX_PATH;DWORDdwVCount = 20;lRes = RegEnumValue(hkey,dwIndex++,tchKey,&dwCnt,NULL,&dwType,(LPBYTE)tchValue,&dwVCount);if (lRes == ERROR_SUCCESS){if(dwVCount >0 && dwCnt >0)arrCom.Add(tchValue);}}}RegCloseKey(hkey); return arrCom.GetSize();}
以上这个函数是将注册表中的串口号的字符串存储到CStringArray中,方便后面使用。

以下就是在combobox中进行使用了,一般要用串口都是在列表框中显示出来然后再进行选择;

voidCCOMSET::ScanPort(){CStringArrayarrayComm;int i=0;for (;i<GetSerialPort(arrayComm);i++){((CComboBox*)GetDlgItem(IDC_COMBO_COMSET))->AddString(arrayComm[i]);} ((CComboBox*)GetDlgItem(IDC_COMBO_COMSET))->SetCurSel(i-1);}
当选择好了之后,就可以将所选的串口号存储在类成员变量中,

if (m_nComIndex>=0){intselePort = m_cbPortSel.GetCurSel();CStringstr,temp;m_cbPortSel.GetLBText(selePort,str);temp = str.Right(strlen(str)-3);m_nPortNum = atoi(temp);m_nComIndex = m_nPortNum;}
由于我是将串口选择单独放在一个DLG中,所以选择完毕回到主界面后,再在其中将此处的ComNum赋值给mainframe中即可,作为一个全局

可见的成员变量。


原创粉丝点击