获取电脑中串口名和串口ID

枚举Windows系统上的串行端口(COM端口),并将这些端口的名称和ID(去除了"COM"前缀后的数字部分)存储到两个向量(m_vPortNameList
和 m_vPortID)中。之后,它将这些端口名称添加到两个组合框(m_comb_PortList 和
m_comb_ScanCodePortList)中。

bool CPortSetting::EnumPort()
{
	//使用RegOpenKeyEx函数打开HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM\注册表键,
	//该键包含了系统上所有串行端口的配置信息。
	HKEY hKey;
	LPCTSTR data_Set = _T("HARDWARE\\DEVICEMAP\\SERIALCOMM\\");
	long ret0 = (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, data_Set, 0, KEY_READ, &hKey));
	if (ret0 != ERROR_SUCCESS)
	{
		return false;
	}

	const int nNameSize = 100;
	int nNum = 0;
	TCHAR szName[nNameSize];
	TCHAR szPortName[nNameSize];
	LONG Status;
	DWORD nIndex = 0;
	DWORD nKeyNameSize = sizeof(szName);;
	DWORD nPortNameSize = sizeof(szPortName);
	DWORD nType;

	m_vPortID.clear();
	m_vPortNameList.clear();
	do
	{
		//使用RegEnumValue函数枚举该键下的所有值。每个值都代表一个串行端口的配置,
		//其中值名通常是端口的名称(如"COM1"),值数据可能包含端口的额外配置信息(但在这个例子中未使		用)。
		Status = RegEnumValue(hKey, nIndex++, szName, &nKeyNameSize, NULL, &nType,
			(PUCHAR)szPortName, &nPortNameSize);
		if ((Status == ERROR_SUCCESS) || (Status == ERROR_MORE_DATA))
		{
			TSTRING strPortName = szPortName;// 串口名
			m_vPortNameList.push_back(strPortName);
			//对于每个枚举到的项,代码将值名(即端口名称)添加到m_vPortNameList中,
			//并去除"COM"前缀后转换为整数,添加到m_vPortID中。
			//注意:ERROR_MORE_DATA通常表示缓冲区太小,无法容纳所有返回的数据。但在这个上下文中,
			//它可能不是预期的错误码,因为RegEnumValue的缓冲区大小是预先设定的,并且每次循环都会重置。
			TSTRING strPortID = strPortName.replace(strPortName.find(_T("COM")),3,_T(""));
			int nID = _wtoi(strPortID.c_str());//串口ID
			m_vPortID.push_back(nID);

			nNum++;// 串口计数
		}

		nKeyNameSize = sizeof(szName);
		nPortNameSize = sizeof(szPortName);
	} while ((Status == ERROR_SUCCESS) || (Status == ERROR_MORE_DATA));

	RegCloseKey(hKey);

	m_comb_PortList->RemoveAll();
	AddComboElement(m_comb_PortList, m_vPortNameList);

	//2023.10.25 add 扫码端口号设置
	m_comb_ScanCodePortList->RemoveAll();
	AddComboElement(m_comb_ScanCodePortList, m_vPortNameList);

	return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Minuw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值