PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter=NULL;
DWORD dwRetVal=0;
CString str;
pAdapterInfo=(IP_ADAPTER_INFO*)malloc(sizeof(IP_ADAPTER_INFO));
ULONG ulOutBufLen=sizeof(IP_ADAPTER_INFO);
dwRetVal=GetAdaptersInfo(pAdapterInfo,&ulOutBufLen);
if(dwRetVal==ERROR_BUFFER_OVERFLOW)
{
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
str+="有多个网卡";
str+='/r';
str+='/n';
}
if((dwRetVal=GetAdaptersInfo(pAdapterInfo,&ulOutBufLen))==NO_ERROR)
{
pAdapter=pAdapterInfo;
while(pAdapter)
{
str="------------------------------------------------------------";
str+='/r';
str+='/n';
str+="AdapterName:";
str+=pAdapter->AdapterName;
str+='/r';
str+='/n';
str+="AdapterDesc:";
str+=pAdapter->Description;
str+='/r';
str+='/n';
str+="AdapterAddr:";
for(UINT i=0;i<pAdapter->AddressLength;i++)
{
char temp[10];
itoa(pAdapter->Address[i],temp,16);
str+=temp;
if(i<pAdapter->AddressLength-1)
{
str+=(i==pAdapter->AddressLength-1?'n':'-');
}
}
str+='/r';
str+='/n';
str+="AdapterType:";
char temp[10];
itoa(pAdapter->Type,temp,10);
str+=temp;
str+='/r';
str+='/n';
str+="IPAddress:";
str+=pAdapter->IpAddressList.IpAddress.String;
str+='/r';
str+='/n';
str+="IPMask:";
str+=pAdapter->IpAddressList.IpMask.String;
pAdapter=pAdapter->Next;
}
}
ed2.SetWindowText(str);
说明:这段代码作为一个独立的函数封装,其中ed2是一个文本框,负责将取到的内容显示
typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO* Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires; } IP_ADAPTER_INFO,
*PIP_ADAPTER_INFO;