stuAdaptersInfo是自定义的结构体,可以按照自己的需要重新定义,这里就不提供定义了 //PIP_ADAPTER_INFO结构体存储本机网卡信息,包括本地网卡、无线网卡和虚拟网卡
PIP_ADAPTER_INFO pAdapterInfo=(IP_ADAPTER_INFO *) malloc(sizeof(IP_ADAPTER_INFO));
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);
//调用GetAdaptersInfo函数,填充pAdapterInfo指针变量,其中ulOutBufLen参数既是输入也是输出
if(GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS)
{
//如果分配失败,释放后重新分配
GlobalFree (pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc (ulOutBufLen);
}
if(GetAdaptersInfo( pAdapterInfo, &ulOutBufLen) == NO_ERROR)
{
while (pAdapterInfo)
{
char * ipAddress=pAdapterInfo->IpAddressList.IpAddress.String;
QString strIPAddress(ipAddress);
QString strMACAddress;
strMACAddress.sprintf("%2X-%2X-%2X-%2X-%2X-%2X",
pAdapterInfo->Address[0],pAdapterInfo->Address[1],
pAdapterInfo->Address[2],pAdapterInfo->Address[3],
pAdapterInfo->Address[4],pAdapterInfo->Address[5]);
//pAdapter->Type是MIB_IF_TYPE_ETHERNET为本地网卡,pAdapter->Type是71为无线网卡
//这里假设每个网卡只有一个IP
if(pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET)
{
//stuAdaptersInfo.stuEthernetCardInfo.strIPAddress = strIPAddress;
//stuAdaptersInfo.stuEthernetCardInfo.strMACAddress = strMACAddress;
}
else if(pAdapterInfo->Type == 71)
{
//stuAdaptersInfo.stuWirelessCardInfo.strIPAddress = strIPAddress;
//stuAdaptersInfo.stuWirelessCardInfo.strMACAddress = strMACAddress;
}
PIP_ADAPTER_INFO tmpAdapterInfo = pAdapterInfo;
pAdapterInfo = pAdapterInfo->Next;
delete tmpAdapterInfo;
tmpAdapterInfo = NULL;
}
}