Labwindows CVI 自动识别返回串口号

本文介绍了一个C++函数,用于从Windows注册表中读取串口(COM)设备的名称。通过枚举HARDWAREDEVICEMAPSERIALCOMM路径下的键值,此函数能够收集所有可用串口的名称,并将它们存储在一个二维字符数组中。

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

#include <windows.h>
#include <winreg.h>
//==========================================================================
/*
 * 功  能: 通过访问注册表获得串口号。
 * 参  数:二维数组用来存放返回数组   
 * 返回值:返回-1失败,返回0成功
 */
static int GetComNum(char strSerialList[256][25], int *comNum)
{
	char Name[25];
	int i = 0;
	unsigned char szPortName[25];
	long Status = 0.0;
	int dwIndex = 0;
	int dwName;
	int dwSizeofPortName;
	int Type;
	HKEY hKey; 						 								//返回注册表项的句柄
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM\\", 0, KEY_READ, &hKey) != ERROR_SUCCESS) //打开注册表
		return -1;
	dwName = sizeof(Name);
	dwSizeofPortName = sizeof(szPortName);
	while((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA))
	{
		Status = RegEnumValue(hKey, dwIndex++, Name, &dwName, NULL, &Type, szPortName, &dwSizeofPortName); //列举注册表的值
		if((Status == ERROR_SUCCESS)||(Status == ERROR_MORE_DATA))
		{
			strcpy(strSerialList[i], (const char*)szPortName);       // 串口字符串保存
			i++;
		}
		dwName = sizeof(Name); 
		dwSizeofPortName = sizeof(szPortName); 
	}
	*comNum = i;
	RegCloseKey(hKey);												//关闭注册表
	return 0;	
}

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值