博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取当前电脑全部网络连接名字
阅读量:5103 次
发布时间:2019-06-13

本文共 4453 字,大约阅读时间需要 14 分钟。


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

写下来给大家參考下

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

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
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 
#include
#pragma comment( lib, "Iphlpapi.lib" ) #pragma comment( lib, "Mprapi.lib" )
当然, 我须要的是获取网络连接的显示名字,所以选择第三种方法

转载于:https://www.cnblogs.com/gccbuaa/p/6708774.html

你可能感兴趣的文章
SQL Server获取月度列表
查看>>
python常用函数
查看>>
python 描点画圆
查看>>
FastDFS使用
查看>>
服务器解析请求的基本原理
查看>>
pycharm 如何设置方法调用字体颜色
查看>>
VUE源码解析心得
查看>>
[HDU3683 Gomoku]
查看>>
【工具相关】iOS-Reveal的使用
查看>>
整体二分——[Poi2011]Meteors
查看>>
数据库3
查看>>
delphi之事件
查看>>
windows server 2008 r2 安装
查看>>
Enigma –> Sadness
查看>>
存储分类
查看>>
下一代操作系统与软件
查看>>
【iOS越狱开发】如何将应用打包成.ipa文件
查看>>
[NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
查看>>
Hat’s Words (分成两个字符串考虑)
查看>>
Yii2 Lesson - 03 Forms in Yii
查看>>