首页 > 系统相关 >十万个为什么 [Windows] 获取串口号

十万个为什么 [Windows] 获取串口号

时间:2024-08-05 17:08:08浏览次数:11  
标签:info 十万个 Windows dev key NULL 口号 port name

#include <Windows.h>
#include <SetupAPI.h> // -lsetupapi
#include <devguid.h>  // -luuid

#include <stdio.h>

#include <map>
using namespace std;


map<string, string> get_serial_ports()
{
	map<string, string> port_name_to_dev_name;

	HDEVINFO h_dev_info = SetupDiGetClassDevs(&GUID_DEVCLASS_PORTS, NULL, NULL, DIGCF_PRESENT);
	if (h_dev_info == INVALID_HANDLE_VALUE)
	{
		return port_name_to_dev_name;
	}

	SP_DEVINFO_DATA dev_info_data;
	dev_info_data.cbSize = sizeof(SP_DEVINFO_DATA);

	for (DWORD i = 0; SetupDiEnumDeviceInfo(h_dev_info, i, &dev_info_data); i++)
	{
		HKEY h_key_dev = SetupDiOpenDevRegKey(h_dev_info, &dev_info_data, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);

		DWORD type;
		DWORD size = 256;	// size会被RegQueryValueEx修改

		char port_name[256];
		char dev_name[256];

		if (h_key_dev != INVALID_HANDLE_VALUE
			&& RegQueryValueEx(h_key_dev, "PortName", NULL, &type, (LPBYTE)port_name, &size) == ERROR_SUCCESS
			&& type == REG_SZ
			&& SetupDiGetDeviceRegistryProperty(h_dev_info, &dev_info_data, SPDRP_DEVICEDESC, NULL, (PBYTE)dev_name, sizeof(dev_name), NULL))
		{
			port_name_to_dev_name[port_name] = dev_name;
		}

		if (h_key_dev != INVALID_HANDLE_VALUE)
		{
			RegCloseKey(h_key_dev);
		}
	}

	SetupDiDestroyDeviceInfoList(h_dev_info);

	return port_name_to_dev_name;
}

int main()
{
	for (const auto& kv : get_serial_ports())
	{
		printf("%s\t\%s\n", kv.first.c_str(), kv.second.c_str());
	}
}

 

标签:info,十万个,Windows,dev,key,NULL,口号,port,name
From: https://www.cnblogs.com/kehuadong/p/18343590

相关文章

  • 解决windows报错:该文件没有与之关联的应用来执行该操作
    报错截图:解决方案1、新建txt文件2、复制内容到txt文件taskkill/f/imexplorer.exeregadd"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIcons"/v29/d"C:\Windows\system32\imageres.dll,154"/treg_sz/fregadd......
  • cmake引入第三方库的debug和release版本之Windows版本
    概述#本文将介绍cmak引入第三方库debug和release不同配置。Windows上,习惯将debug模式下生成的动态库名后缀添加D以作和release区分。cmake创建一个项目A,A引入动态库B,cmake怎么配置A链接动态库B的debug和release对应的库呢本文的教程是基于 这里,如果没有看,我推荐你先看......
  • BitDock:为Windows桌面带来Mac风格的美化工具(附下载)
    许多人对Mac系统的精致界面情有独钟,但面对苹果电脑不菲的价格标签——就例如年初新登场的基础款MacBookAir,即便配置朴素,也轻易跨过了八千大关(这预算在Windows阵营足以拥抱高端配置),不免让人望而却步。幸运的是,将Windows系统改头换面,焕发Mac般的高雅并非遥不可及的梦想。下载:Bi......
  • 一款专业的 Windows 恶意程序分析与清理工具
    大家好,今天给大家分享一款专业的Windows恶意程序分析与清理工具OpenArk,它能够帮助用户发现系统中隐藏的恶意软件。OpenArk是一款Windows平台上的开源Ark工具.Ark是Anti-Rootkit(对抗恶意程序)的简写,OpenArk目标成为逆向工程师、编程人员的工具,同时也能为那些希望清理恶意软......
  • Parallels Desktop19.3.0虚拟机软件可以让你在Mac上同时运行Windows、Linux等多个系统
    ParallelsDesktop19,一个虚拟机软件,可以让你在Mac上同时运行Windows、Linux等多个系统。听起来是不是很厉害?但其实它还有更多隐藏的小技巧等着你去发现。如果你还在因为Mac和Windows之间的不兼容而苦恼,那么ParallelsDesktop19就是你的救星。它可以帮助你轻松地在Mac上运行Win......
  • Parallels Desktop19Mac就是这样一个神器!在Windows和Mac之间反复切换横跳!
    在Windows和Mac之间反复横跳,是很多职场人的常态。Windows系统生态完善,软件丰富;而Mac的优雅设计、出色的性能以及稳定的系统体验也让人难以舍弃。但鱼与熊掌不可得兼,两个系统来回切换,需要准备两台电脑,既麻烦又占用空间,还增加了经济负担。如果一台电脑可以同时运行两个操作系......
  • windows 获取套接字连接状态
     GetTcpTable 和 GetTcpTable2 都是WindowsAPI中用于获取TCP连接表格的函数,但它们有一些关键的区别:GetTcpTable定义:GetTcpTable 函数用于获取TCP连接的表格信息。结构体:它使用 MIB_TCPTABLE 结构体来表示TCP连接的表格。兼容性:GetTcpTable 是早期的......
  • 面向-Windows-程序员的-C---软件互操作教程-全-
    面向Windows程序员的C++软件互操作教程(全)原文:C++SoftwareInteroperabilityforWindowsProgrammers协议:CCBY-NC-SA4.0一、准备介绍本章介绍了软件互操作性项目。我们先简要了解一下先决条件。接下来是项目概述。最后,我们描述了项目的主要组成部分以及它们是如何组......
  • 【攻防技术系列+权限维持】Windows开机启动项
    一、简介在我们的计算机开机的时候,总是会有一些程序和服务自动启动,这其中包括Windows操作系统运行所必需的程序和其他用户程序。这是操作系统给用户提供的功能,意在为用户开机启动程序提供方便,我们不必每次启动时都手动的打开一些必须打开的程序。二、常见开机启动项2.1启动文......
  • windows xusb21.sys驱动对虚拟手柄个数限制
    由于windows授权限制,云游戏服务器上的windows版本多数为server2019部分游戏用到了手柄,调研后基于https://github.com/nefarius/ViGEmBus来魔改虚拟出84个手柄(一个容器只跑一个游戏,一个游戏独立使用4个手柄,一台云游戏服务器预开21个容器,所以理论至少需要能创建84个手柄)但是实......