windows下枚举串口的方法,超好用,跟设备管理器枚举一样

本文介绍了一种在Windows系统中枚举串口的方法,通过SetupAPI库的SetupDi开头的函数实现,确保枚举结果与设备管理器一致,尤其适用于解决在某些特定环境下注册表枚举方法失效的问题。示例代码展示了如何获取串口的友好名称、描述和COM号。
摘要由CSDN通过智能技术生成

 做上位机,与设备通信,经常会用到串口。看到一些串口助手,像SSCOM,能自动扫描枚举PC的串口。所以后面的应用,我也加上自动枚举串口。
 在网上找的资料,最多的是读取注册表里的内容,HKEY_LOCAL_MACHINE\ Hardware\DeviceMap\SerialComm"

在这里插入图片描述
 这个方法很简单,能读到本机串口,虚拟串口,或外扩USB串口等的COM号。代码如下:

typedef struct _SERIALNAMEBUF
{
   
	int SerialNum;
	TCHAR ppSerialName[128][10];
} SERIALNAMEBUF, *PSERIALNAMEBUF;

int EnumSerialPort(SERIALNAMEBUF *pSerialNameBuf)
{
   
	int i = 0;
	HKEY hKey;   
	TCHAR  RegKeyName[128],SerialPortName[10];
	int Num=0;

	memset(pSerialNameBuf, 0, sizeof(SERIALNAMEBUF));

	if(ERROR_SUCCESS == ::RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("Hardware\\DeviceMap\\SerialComm"),NULL, KEY_READ, &hKey ))//打开串口注册表对应的键值  
	{
      
		DWORD  dwLong,dwSize; 
		while(1)   
		{
      
			dwLong = dwSize = sizeof(RegKeyName);   
			if(ERROR_NO_MORE_ITEMS == ::RegEnumValue(hKey,i,RegKeyName,&dwLong,NULL,NULL,(PUCHAR)SerialPortName, &dwSize))//枚举串口   
			{
   
				break;   
			}
			_tcscpy(pSerialNameBuf->ppSerialName[Num], SerialPortName); 
			Num ++;
			if (Num == 128)
			{
   
				break;
			}
			i++;   
		}
	}
	RegCloseKey(hKey);
	pSerialNameBuf-
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值