900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【C++】Windows 读取注册表方法获取串口设备信息

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

时间:2019-10-08 10:07:46

相关推荐

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

文章目录

前言代码在这里:使用查找注册表键值对得到串口设备列表注意:

前言

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

代码在这里:

github:

git clone /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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。