网络计算机名,获取当前计算机所有网络连接名字

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



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

写下来给大家参考下

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

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;iNumAdapters;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

#include

#pragma comment( lib, "Iphlpapi.lib" )

#pragma comment( lib, "Mprapi.lib" )

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值