您当前的位置:首页 > 计算机 > 编程开发 > VC/VC++

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

时间:09-15来源:作者:点击数:

获取电脑中串口名和串口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;
}
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐