【C++】Windows 读取注册表方法获取串口设备信息

前言

这些名字是凭感觉取的,没有专门学过Windows API。以前用Qt读写串口 挺方便的,但是现在要不依赖于Qt读写串口,遇到查找串口的问题,所以操作了封装了一下。
在这里插入图片描述

代码在这里:

github
git clone https://github.com/MisakaMikoto128/WinRegister.git
网盘:http://liuyuanlin.xyz:666/#s/6LnvBrVg

头文件

#pragma once
#define SERIALPATH _T("Hardware\\DeviceMap\\SerialComm")

void wcharTochar(const wchar_t* wcharSrc, char* chrDst, int chrDstlength);
bool QueryRegKey(LPCWSTR keyPath, LPCWSTR ValueName, char* Value, int valueLength);
vector<string> QuerySerialPort();

使用

查找注册表键值对

_T等同于TEXT, _T("")是一个宏,定义于tchar.h下。因为Windows使用两种字符集ANSI和UNICODE,如果你编译一个程序为ANSI方式,_T实际不起任何作用。

而如果编译一个程序为UNICODE方式,则编译器会把_T("Hello")字符串以UNICODE方式保存。_T和_L的区别在于,_L不管你是以什么方式编译,一律以UNICODE方式保存。

L是表示字符串资源为Unicode的。

#include "WinReg.h"
int main()
{
    
    
	LPCWSTR keyPath = SERIALPATH;
	LPCWSTR ValueName = _T("\\Device\\Serial2");
	char Value[MAX_PATH];
	int valueLength = MAX_PATH;
	if(QueryRegKey(keyPath, ValueName , Value, valueLength))
		printf("query success : %s!\n", Value);
	return 0;
}

在这里插入图片描述

得到串口设备列表

对比注册表符合。

#include "WinReg.h"
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
    
    
	vector<string> COMList = QuerySerialPort();
	for(string& var : COMList)
	{
    
    
		cout << var << endl;
	}
	return 0;
}

在这里插入图片描述

注意:

字符集默认只 支持Unicode
在这里插入图片描述

其他:
RegQueryValueEx函数默认第5个类型是,LPBYTE,若定义选择此,输入将只有一个字母C

参考:
[1] 串口编程-枚举遍历串口、获取PC所有串口名称、遍历注册表项、RegEnumValue用法
[2] 微软官方文档
[3] C++ 读取windows注册表 值
[4] 百度百科._T

猜你喜欢

转载自blog.csdn.net/qq_42820594/article/details/108417956