VC获取当前电脑所有网络连接名字

2023-05-16

最近因为项目有需要获取本机的所有存在的网络连接名称,在网上也找了资料,有好几种方法,不过就只有一种是能够达到我想要的要求

写下来给大家参考下

第一种方法:遍历注册表来获取

void __fastcall MyGetLanAdapterName(char *szLanAdapterName)
{
	HKEY hKey, hSubKey, hNdiIntKey;
	if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
		"System\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}",
		0,
		KEY_READ,
		&hKey) != ERROR_SUCCESS)
		return;

	DWORD dwIndex = 0;
	DWORD dwBufSize = 256;
	DWORD dwDataType;
	char szSubKey[256];
	unsigned char szData[256];

	while(RegEnumKeyEx(hKey, dwIndex++, szSubKey, &dwBufSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
	{
		if(RegOpenKeyEx(hKey, szSubKey, 0, KEY_READ, &hSubKey) == ERROR_SUCCESS)
		{ 
			if(RegOpenKeyEx(hSubKey, "Ndi\\Interfaces", 0, KEY_READ, &hNdiIntKey) == ERROR_SUCCESS)
			{
				dwBufSize = 256;
				if(RegQueryValueEx(hNdiIntKey, "LowerRange", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
				{
					if(strcmp((char*)szData, "ethernet") == 0) // 判断是不是以太网卡
					{
						dwBufSize = 256;
						if(RegQueryValueEx(hSubKey, "DriverDesc", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
						{
							// szData 中便是适配器详细描述
							dwBufSize = 256;
							if(RegQueryValueEx(hSubKey, "NetCfgInstanceID", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
							{
								//szData中便是适配器名称
								strcpy(szLanAdapterName, (char *)szData);
							}
						}
					}
				}
				RegCloseKey(hNdiIntKey);
			}
			RegCloseKey(hSubKey);
		}
		dwBufSize = 256;
	} /* end of while */
	RegCloseKey(hKey);
}

szLanAdapterName即为网络连接的名称 如{C6DFC923-0895-4FCE-85F2-740E6133EC6D}

第二种方法是通过API:

void __fastcall GetLanAdapterName()
{
	ULONG ulAdapterInfoSize = sizeof(IP_ADAPTER_INFO);
	IP_ADAPTER_INFO *pAdapterInfoBkp, *pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
	if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_BUFFER_OVERFLOW ) // 缓冲区不够大
	{
		delete pAdapterInfo;
		pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
		pAdapterInfoBkp = pAdapterInfo;
	}
	if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_SUCCESS )
	{
		do{ // 遍历所有适配器
			if(pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET) // 判断是否为以太网接口
			{
				// pAdapterInfo->Description 是适配器描述
				// pAdapterInfo->AdapterName 是适配器名称
			}
			pAdapterInfo = pAdapterInfo->Next;
		}while(pAdapterInfo);
	}
	delete pAdapterInfoBkp;
}

AdapterName 也能得到网络连接的名称 如{C6DFC923-0895-4FCE-85F2-740E6133EC6D} 适配器描述如:Realtek RTL8139(A) PCI Fast Ethernet Adapter

第三种方法也是使用API:

void __fastcall GetLanAdapterName()
{	HANDLE   hMprConfig;   
	DWORD   dwRet=0;   
	CString   strInfo,strTmp;   
	PIP_INTERFACE_INFO   plfTable=NULL;   
	IP_ADAPTER_INDEX_MAP   AdaptMap;   
	DWORD   dwBufferSize=0;   
	WCHAR   szFriendName[256];   
	DWORD   tchSize=sizeof(WCHAR)*256;   
	ZeroMemory(&szFriendName,tchSize);   




	dwRet=MprConfigServerConnect   (NULL,&hMprConfig);   
	dwRet=GetInterfaceInfo(NULL,&dwBufferSize);   


	if(dwRet==ERROR_INSUFFICIENT_BUFFER)   
	{   
		plfTable=(PIP_INTERFACE_INFO)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,dwBufferSize);   
		GetInterfaceInfo(plfTable,&dwBufferSize);   
	}   
	strInfo.Empty();   
	for(UINT   i=0;i<plfTable->NumAdapters;i++)   
	{   
		AdaptMap=plfTable->Adapter[i];   
		dwRet=MprConfigGetFriendlyName(hMprConfig,AdaptMap.Name,(PWCHAR)szFriendName,tchSize);  


		char szName[256];
		memset( szName, 0, 256 );
		int nLen = WideCharToMultiByte( CP_ACP,NULL, szFriendName,-1,NULL,0,NULL,FALSE );
		WideCharToMultiByte (CP_ACP,NULL,szFriendName,-1,szName,nLen,NULL,FALSE);
		strTmp.Format(_T("Index:%u\nName:%s\n"),AdaptMap.Index,szName);   //szName即为网络连接的名称
		strInfo+=strTmp;   
	}   


	HeapFree(GetProcessHeap(),HEAP_ZERO_MEMORY,plfTable); 
}

szName即为网络连接的名称,如 "本地连接","本地连接1"...后面通过API函数获取需要加入下面头文件

#include <Mprapi.h>
#include <iphlpapi.h>
#pragma comment( lib, "Iphlpapi.lib" )
#pragma comment( lib, "Mprapi.lib" )

当然,我需要的是获取网络连接的显示名字,所以选择第三种方法

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VC获取当前电脑所有网络连接名字 的相关文章

随机推荐

  • 【逆向工程】mapper文件报错:Result Maps collection already contains value for...BaseResultMap

    在使用逆向工程生成代码及mapper文件的时候 xff0c 第一次生成完之后 xff0c 发现少配了一个数据库表 xff0c 因此也就少了对应的实体类和mapper文件 xff0c 于是就直接在工程中添配置上缺少的数据库表就又执行了一遍 x
  • 关于Android studio第一次创建工程时加载过慢的解决方法

    在进行Android开发的时候 xff0c 原来使用的是Android studio2 1版本的 xff0c 突然心血来潮 xff0c 去官网下了一个最新版本的 突然之间遇到许多问题 第一个问题就是第一次创建工程时加载过慢 在网上查找了许多
  • Spring项目实践(三)--- Spring配置文件详解

    不同于我们讲的pom xml以及web xml xff0c 这两个文件的名称是固定的 xff0c 不可更改的 xff0c 这里的设计采用的是约定优于配置的原则 而Spring的配置文件的名称是可以更改的 xff0c 实际上我们在 Sprin
  • Spring项目实践(四)--- Spring MVC配置文件详解

    前三讲我们依次讲了pom xml web xml和spring配置文件 xff0c 这次我们来讲一下springmvc的配置 首先明确一下springmvc是spring的一个模块 springmvc的配置文件 xff0c 也不是固定命名的
  • ShadowSSDT Hook

    ShadowSSDT表的获取 这里的ShadowSSDT表的获取是通过函数KeAddSystemServiceTable来获取的 使用这个函数的原因 xff1a 1 这个函数是已经导出的 xff0c 可以在代码中直接使用 2 这个函数里面使
  • BCTF总结

    缘由 上周 xff0c 我们小组Sigma参加了 百度杯 BCTF比赛 xff0c 经历了难忘的双休 xff0c 这次的BCTF跟以前参加的国内类似的安全比赛有些不同 xff0c 时间只有48小时 xff0c 题目不多 xff0c 但难度大
  • BCTF_海报探秘(300)

    这个题目来自上周的BCTF比赛 xff0c 题目是海报探秘 xff08 300 xff09 xff0c 一张png图片中隐藏了KEY xff0c 解出KEY xff0c 具体报告 xff0c 请下载 xff1a http download
  • 博客转移

    最近好久不来CSDN了 xff0c 自己搭建了一个博客 欢迎各位去新博客留言 http www l0g1n cn 以前学习汇编的博客 http www asmedu net blog user usermain jsp neighborId
  • 《Windows程序设计》之BLOKOUT1

    LRESULT CALLBACK WndProc HWND hwnd UINT message WPARAM wParam LPARAM lParam static BOOL fBlocking fValidBox static POINT
  • MySQL(mariadb)

    MySQL历史 1979年 xff1a TcX公司 Monty Widenius xff0c Unireg1996年 xff1a 发布MySQL1 0 xff0c Solaris版本 xff0c Linux版本1999年 xff1a MyS
  • 天猫抢红包小工具源码

    时间很仓促 xff0c 写的很乱 xff0c 也就能用明天一天了 主要还是学习这个过程 include lt Windows h gt include lt stdio h gt include lt iostream gt include
  • vs2010开发qt程序debug正常,release出错

    在debug模式下 xff0c 配置的动态链接库是qtmaind lib QtGuid4 lib QtCored4 lib 这些链接库 xff0c 在release模式下是不适用的 xff0c 进入到qt的目录下 xff0c 发现了有一些不
  • cout与wcout

    一直以来只知道有cout用来输出 xff0c 今天用cout输出wchar时出现问题了 xff0c 输出结果是一段地址 xff0c 才发现了wcout的存在 使用wcout输出中文时 xff0c 又出现问题 xff0c 中文输出不了 xff
  • 主引导记录(MBR)信息分析与获取

    前段时间在安装黑苹果时 xff0c 发现一个问题 xff0c 电脑在启动时 xff0c 会找激活分区 xff0c 如果没有找到 xff0c 那就启动不起来 那能否写个小程序读取一下MBR信息 xff0c 把激活分区换成其它 xff0c 搞点
  • Duilib登录窗口

    先上效果图 xff08 自己感觉还不错 xff09 xff1a 功能不完善 xff0c 一是为了熟悉xml的写法 xff0c 手写 xff0c 不建议使用编辑器 xff0c 二了为了理顺程序的流程 xff0c 加入了部分注释 xml文件 l
  • Gitee Pages Pro + Hexo自定义域名

    前景摘要 xff1a 最近 xff0c 本菜鸡打算把hexo的博客站点搬到gitee xff0c 毕竟gitee pages pro有一个月的免费自定义域名的机会 xff01 xff01 其实最主要的原因还是coding pages的延迟有
  • 人脸识别流程

    一 人脸识别技术流程 xff1a 1 人脸图像采集及检测 在人脸检测算法中 xff0c 有模板匹配模型 Adaboost模型等 xff0c 其中Adaboost模型在速度和精度的综合性能上表现最好 该算法特点就是训练慢 xff0c 检测快
  • Ubuntu 18.04 系统自带浏览器闪出问题解决

    首先解释一下闪的是什么 xff1f 他是gnome 网络管理器自带的网络链接检查 xff0c 我们会经常遇到它闪以下然后就退出的问题 xff0c 这可能与我们修改主题有关 xff0c 有时还偶尔会看到这个系统自带浏览器没有闪退 xff0c
  • HTML5中 audio标签的样式修改

    由于html5的流行 xff0c 现在移动端大多数的需求都可以使用audio来播放音频 xff0c 但您可能只是需要很简单的播放 停止效果 xff0c 但不同的浏览器上的audio样式却不尽人意 xff0c 那么要怎么改变这个样式呢 xff
  • VC获取当前电脑所有网络连接名字

    最近因为项目有需要获取本机的所有存在的网络连接名称 在网上也找了资料 有好几种方法 不过就只有一种是能够达到我想要的要求 写下来给大家参考下 第一种方法 遍历注册表来获取 void fastcall MyGetLanAdapterName