如何在程序中获得网络连接的名称,如:本地连接、本地连接1、本地连接2 
另外谁有在win2k下不需要重起改ip地址的程序

解决方案 »

  1.   

    ULONG NTEContext = 0;
     ULONG NTEInstance;
     IPAddr NewIP;
     IPAddr NewMask;  
         
     NewIP = inet_addr(NewIPStr);
     NewMask = inet_addr(NewMaskStr);
    AddIPAddress(NewIP, NewMask, Index, &NTEContext, &NTEInstance)index可以由下面获得
    PIP_ADAPTER_INFO pAdapterInfo,pAdapt;
    DWORD dwAdapterInfoSize=0;
    PIP_ADDR_STRING pAddrStr;
    DWORD dwRet=0;
    CString strInfo,strTmp;
    dwRet=GetAdaptersInfo(NULL,&dwAdapterInfoSize);pAdapterInfo = (PIP_ADAPTER_INFO) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY, dwAdapterInfoSize);if(pAdapterInfo!=NULL)
    {
        dwRet=GetAdaptersInfo(pAdapterInfo, &dwAdapterInfoSize);
    }if(dwRet==ERROR_SUCCESS)
    {
       pAdapt = pAdapterInfo;  while (pAdapt)
      {
        //mac地址
         for (UINT i=0; i<pAdapt->AddressLength; i++)
    {
    if (i == (pAdapt->AddressLength - 1))
    {
       strTmp.Format(_T("%.2X "),pAdapt->Address[i]);
       strInfo+=strTmp;
    }
    else
    {
      strTmp.Format(_T("%.2X- "),pAdapt->Address[i]);
      strInfo+=strTmp;
    }
    }

    //网卡的GUID名称
    strTmp.Format(_T("\n%s"),pAdapt->AdapterName);
    strInfo+=strTmp;         //网卡的描述,设备管理器显示的名称
    strTmp.Format(_T("\n%s"),pAdapt->Description);
    strInfo+=strTmp; pAddrStr = &(pAdapt->IpAddressList);
    while (pAddrStr) 
    {
       strTmp.Format(_T("索引:%d\n"),pAdapt->Index);
       strInfo+=strTmp;    strTmp.Format(_T("IP地址:%s\n"),pAddrStr->IpAddress.String);
       strInfo+=strTmp;    strTmp.Format(_T("子网掩码:%s\n"),pAddrStr->IpMask.String);
       strInfo+=strTmp;
       pAddrStr = pAddrStr->Next;
    }

    AfxMessageBox(strInfo);
    strInfo.Empty();
    pAdapt = pAdapt->Next;
       
    }HeapFree(GetProcessHeap(),HEAP_ZERO_MEMORY,pAdapterInfo);包含的头文件iphlpapi.h,连接库Iphlpapi.h
    用多字节编译
      

  2.   

    上面的程序不能得到网络连接的名称,下面的程序补上,包含的头文件iphlpapi.h,Mprapi.h连接库Iphlpapi.lib,Mprapi.lib。要server版本的windows
    要用unicode编译,否则乱码;没有进行出错处理
    HANDLE hMprConfig;
    DWORD dwRet=0;
    CString strInfo,strTmp;
    PIP_INTERFACE_INFO plfTable=NULL;
    IP_ADAPTER_INDEX_MAP AdaptMap;
    DWORD dwBufferSize=0;
    TCHAR szFriendName[256];
    DWORD tchSize=sizeof(TCHAR)*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);
    strTmp.Format(_T("Index:%u\nName:%s\n"),AdaptMap.Index,szFriendName);
    strInfo+=strTmp;
    }
    AfxMessageBox(strInfo);
    HeapFree(GetProcessHeap(),HEAP_ZERO_MEMORY,plfTable);得到的index也可以进行AddIPAddress,具体如上