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


    原文链接地址: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
    Name:%s
    "),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进行匹配

     

  • 相关阅读:
    geoserver发布地图服务WMTS
    geoserver发布地图服务WMS
    geoserver安装部署步骤
    arcgis api 3.x for js 入门开发系列十四最近设施点路径分析(附源码下载)
    arcgis api 3.x for js 入门开发系列十三地图最短路径分析(附源码下载)
    cesium 之自定义气泡窗口 infoWindow 后续优化篇(附源码下载)
    arcgis api 3.x for js 入门开发系列十二地图打印GP服务(附源码下载)
    arcgis api 3.x for js 入门开发系列十一地图统计图(附源码下载)
    arcgis api 3.x for js 入门开发系列十叠加 SHP 图层(附源码下载)
    arcgis api 3.x for js入门开发系列九热力图效果(附源码下载)
  • 原文地址:https://www.cnblogs.com/wuyuan2011woaini/p/10640403.html
Copyright © 2020-2023  润新知