获取当前电脑全部网络连接名字

原文链接地址:https://www.cnblogs.com/gccbuaa/p/6708774.html

近期由于项目有须要获取本机的全部存在的网络连接名称,在网上也找了资料,有好几种方法,只是就仅仅有一种是可以达到我想要的要求

 

写下来给大家參考下

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

 

 1 void __fastcall MyGetLanAdapterName(char *szLanAdapterName)
 2 {
 3     HKEY hKey, hSubKey, hNdiIntKey;
 4     if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
 5         "System\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002BE10318}",
 6         0,
 7         KEY_READ,
 8         &hKey) != ERROR_SUCCESS)
 9         return;
10 
11     DWORD dwIndex = 0;
12     DWORD dwBufSize = 256;
13     DWORD dwDataType;
14     char szSubKey[256];
15     unsigned char szData[256];
16 
17     while(RegEnumKeyEx(hKey, dwIndex++, szSubKey, &dwBufSize, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
18     {
19         if(RegOpenKeyEx(hKey, szSubKey, 0, KEY_READ, &hSubKey) == ERROR_SUCCESS)
20         {
21             if(RegOpenKeyEx(hSubKey, "Ndi\\Interfaces", 0, KEY_READ, &hNdiIntKey) == ERROR_SUCCESS)
22             {
23                 dwBufSize = 256;
24                 if(RegQueryValueEx(hNdiIntKey, "LowerRange", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
25                 {
26                     if(strcmp((char*)szData, "ethernet") == 0) // 推断是不是以太网卡
27                     {
28                         dwBufSize = 256;
29                         if(RegQueryValueEx(hSubKey, "DriverDesc", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
30                         {
31                             // szData 中便是适配器具体描写叙述
32                             dwBufSize = 256;
33                             if(RegQueryValueEx(hSubKey, "NetCfgInstanceID", 0, &dwDataType, szData, &dwBufSize) == ERROR_SUCCESS)
34                             {
35                                 //szData中便是适配器名称
36                                 strcpy(szLanAdapterName, (char *)szData);
37                             }
38                         }
39                     }
40                 }
41                 RegCloseKey(hNdiIntKey);
42             }
43             RegCloseKey(hSubKey);
44         }
45         dwBufSize = 256;
46     } /* end of while */
47     RegCloseKey(hKey);
48 }

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

另外一种方法是通过API:

 1 void __fastcall GetLanAdapterName()
 2 {
 3     ULONG ulAdapterInfoSize = sizeof(IP_ADAPTER_INFO);
 4     IP_ADAPTER_INFO *pAdapterInfoBkp, *pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
 5     if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_BUFFER_OVERFLOW ) // 缓冲区不够大
 6     {
 7         delete pAdapterInfo;
 8         pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
 9         pAdapterInfoBkp = pAdapterInfo;
10     }
11     if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_SUCCESS )
12     {
13         do{ // 遍历全部适配器
14             if(pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET) // 推断是否为以太网接口
15             {
16                 // pAdapterInfo->Description 是适配器描写叙述
17                 // pAdapterInfo->AdapterName 是适配器名称
18             }
19             pAdapterInfo = pAdapterInfo->Next;
20         }while(pAdapterInfo);
21     }
22     delete pAdapterInfoBkp;
23 }

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

第三种方法也是使用API:

 1 void __fastcall GetLanAdapterName()
 2 {   HANDLE   hMprConfig;
 3     DWORD   dwRet=0;
 4     CString   strInfo,strTmp;
 5     PIP_INTERFACE_INFO   plfTable=NULL;
 6     IP_ADAPTER_INDEX_MAP   AdaptMap;
 7     DWORD   dwBufferSize=0;
 8     WCHAR   szFriendName[256];
 9     DWORD   tchSize=sizeof(WCHAR)*256;
10     ZeroMemory(&szFriendName,tchSize);
11 
12     dwRet=MprConfigServerConnect   (NULL,&hMprConfig);
13     dwRet=GetInterfaceInfo(NULL,&dwBufferSize);
14 
15     if(dwRet == ERROR_INSUFFICIENT_BUFFER)
16     {
17         plfTable=(PIP_INTERFACE_INFO)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,dwBufferSize);
18         GetInterfaceInfo(plfTable,&dwBufferSize);
19     }
20     strInfo.Empty();
21     for(UINT   i=0;i<plfTable->NumAdapters;i++)
22     {
23         AdaptMap=plfTable->Adapter[i];
24         dwRet=MprConfigGetFriendlyName(hMprConfig,AdaptMap.Name,(PWCHAR)szFriendName,tchSize);
25 
26 
27         char szName[256];
28         memset( szName, 0, 256 );
29         int nLen = WideCharToMultiByte( CP_ACP,NULL, szFriendName,-1,NULL,0,NULL,FALSE );
30         WideCharToMultiByte (CP_ACP,NULL,szFriendName,-1,szName,nLen,NULL,FALSE);
31         strTmp.Format(_T("Index:%u\nName:%s\n"),AdaptMap.Index,szName);   //szName即为网络连接的名称
32         strInfo+=strTmp;
33     }
34 
35     HeapFree(GetProcessHeap(),HEAP_ZERO_MEMORY,plfTable);
36 }

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

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

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

 

 AdaptMap.Index=pAdapterInfo->Index进行匹配

 

转载于:https://www.cnblogs.com/wuyuan2011woaini/p/10640403.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值