C++获取计算机的COM口(串口号)

本文介绍如何在VS2013和QT5.7环境下,通过C++代码获取系统中所有启用的串口设备。通过注册表操作,实现了串口设备的枚举,并提供了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚开始转做上位机,然后要使用串口通信。其实项目不需要获取串口号,开始不知道,就去获取了串口号。
整理了一下,以后要用的话也方便使用。

环境:VS2013 + QT5.7

QStringList ConfigInterfaceDevice::getEnableCommPort()
{
	QStringList CommPortList;

	QString strCommPath = tr("HKEY_LOCAL_MACHINE\\HARDWARE\\DEVICEMAP\\SERIALCOMM");
	QSettings *settings = new QSettings(strCommPath, QSettings::NativeFormat);
	QStringList keyList = settings->allKeys();

	if (!keyList.isEmpty())
	{
		for (int i = 0; i < keyList.count(); i++)
			CommPortList.append(getComm(i,true));
	}

	return CommPortList;
}

// nIndex为索引号 bValue选择返回值为key还是value,默认为value
QString ConfigInterfaceDevice::getComm(int nIndex, bool bValue)
{
	QString strCommRet = tr("");
	HKEY hKey;

	// RegOpenKeyEx windowsApi 成功返回0 需要加<qt_windows.h>头文件
	if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("HARDWARE\\DEVICEMAP\\SERIALCOMM"), 0, KEY_READ, &hKey) != 0)
	{
		QMessageBox::warning(this, tr("注册表"), tr("无法打开注册表!"), QMessageBox::Ok);
		return tr(""); // 无法打开注册表
	}

	QString strKeyMsg;      // 键名
	QString strValueMsg;    // 键值
	wchar_t keyName[256];   // 键名数组
	char keyValue[256];     // 键值数组

	ulong nKeySize = sizeof(keyName);
	ulong nValueSize = sizeof(keyValue);
	ulong nType;

	if (::RegEnumValue(hKey, nIndex, keyName, &nKeySize, 0, &nType, (BYTE*)keyValue, &nValueSize) == 0) // 列举键名
	{
		// 读取键名
		for (uint i = 0; i < nKeySize; i++)
		{
			if (keyName[i] != 0x00)
				strKeyMsg.append(keyName[i]);
		}

		// 读取键值
		for (uint j = 0; j < nValueSize; j++)
		{
			if (keyValue[j] != 0x00)
				strValueMsg.append(keyValue[j]);
		}

		if (bValue)
			strCommRet = strValueMsg;
		else
			strCommRet = strKeyMsg;
	}//if
	else
	{
		::RegCloseKey(hKey); // 关闭注册表
		return tr("");  // 无可用串口
	}

	return strCommRet;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值