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

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

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

INT_PTR	CCOMSET::GetSerialPort(CStringArray &arrCom)
{
	arrCom.RemoveAll();
	HKEY	hkey;
	LONG32	lRes = RegOpenKeyEx(
		HKEY_LOCAL_MACHINE,_T("HARDWARE\\DEVICEMAP\\SERIALCOMM"),
		NULL,KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS|KEY_READ,&hkey);
	if (lRes == ERROR_SUCCESS)
	{
		TCHAR	tchKey[MAX_PATH];
		TCHAR	tchValue[20];
		DWORD	dwIndex = 0;
		DWORD	dwType = REG_SZ;
		while(lRes == ERROR_SUCCESS)
		{
			DWORD	dwCnt = MAX_PATH;
			DWORD	dwVCount = 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中进行使用了,一般要用串口都是在列表框中显示出来然后再进行选择;

void	CCOMSET::ScanPort()
{
	CStringArray	arrayComm;
	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)
	{
		int	selePort = m_cbPortSel.GetCurSel();
		CString	str,temp;
		m_cbPortSel.GetLBText(selePort,str);
			
		temp = str.Right(strlen(str)-3);
		m_nPortNum = atoi(temp);
			
		m_nComIndex = m_nPortNum;

	}
由于我是将串口选择单独放在一个DLG中,所以选择完毕回到主界面后,再在其中将此处的ComNum赋值给mainframe中即可,作为一个全局

可见的成员变量。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值