首先再头文件中加入
#include <Iphlpapi.h>
#pragma comment(lib,"Iphlpapi.lib")
//以上表示引用一些必要的struct
typedef struct tagAdapterInfo
{
char szDeviceName[128]; // 名字
char szIPAddrStr[16]; // IP
char szHWAddrStr[18]; // MAC
DWORD dwIndex; // 编号
bool filled;//是否取得了网卡信息
}INFO_ADAPTER, *PINFO_ADAPTER;
//以上是定义存储网卡信息的结构体
INFO_ADAPTER AdapterList[NetCardNumber];
//如果有多块网卡,分别取得每块的信息,结果放在上面的结构体数组中,其中NetCardNumber是#define的一个const
在源文件中加入下列函数
void CReadNetCardInfo::GetAdapterInfo()
{
char tempChar;
ULONG uListSize=1;
PIP_ADAPTER_INFO pAdapter; // 定义PIP_ADAPTER_INFO结构存储网卡信息
int nAdapterIndex = 0;
DWORD dwRet = GetAdaptersInfo((PIP_ADAPTER_INFO)&tempChar, &uListSize); // 关键函数
if (dwRet == ERROR_BUFFER_OVERFLOW)
{
PIP_ADAPTER_INFO pAdapterListBuffer = (PIP_ADAPTER_INFO)new(char[uListSize]);
dwRet = GetAdaptersInfo(pAdapterListBuffer, &uListSize);
if (dwRet == ERROR_SUCCESS)
{
pAdapter = pAdapterListBuffer;
while (pAdapter) // 枚举网卡
{
CString strTemp;
//strTemp.Format(_T("%s"),pAdapter->AdapterName); // 网卡名字
//strTemp = CString("
//Device//NPF_") + strTemp; // 加上前缀
//strcpy(AdapterList[nAdapterIndex].szDeviceName,strTemp);
//strcpy(AdapterList[nAdapterIndex].szIPAddrStr, pAdapter->IpAddressList.IpAddress.String );// IP
FormatMACToStr( AdapterList[nAdapterIndex].szHWAddrStr,pAdapter->Address ); // MAC!
AdapterList[nAdapterIndex].dwIndex = pAdapter->Index; // 编号
AdapterList[nAdapterIndex].filled = true;
pAdapter = pAdapter->Next;
nAdapterIndex ++;
}
delete pAdapterListBuffer;
}
}
}
/*所有的信息都放入了pAdapter中,我只取了网卡MAC,其余的注释掉了,FormatMACToStr是格式化函数,加入一些必要的格式化字符,看起来会漂亮一些,代码见下*/
void CReadNetCardInfo::FormatMACToStr(LPSTR lpHWAddrStr,const unsigned char *HWAddr)
{
int i;
short temp;
char szStr[3];
strcpy(lpHWAddrStr, "");
for (i=0; i<6; ++i)
{
temp = (short)(*(HWAddr + i));
_itoa(temp, szStr, 16);
if (strlen(szStr) == 1) strcat(lpHWAddrStr, "0");
strcat(lpHWAddrStr, szStr);
//if ( i < 5 ) strcat(lpHWAddrStr, "-"); // 加上 -
}
}
//当运行完后,取得的信息放在了AdapterList里面,可以取来做其他用途。此篇文章是接上篇网卡MAC地址所写,因为发现上篇文章的方法有时候是不能取得网卡MAC地址的,这个方法就要可靠一些,当然,是不是万能的,我也不知道,以后慢慢试着用吧。
分享到:
相关推荐
IP Helper API 使用方法详解 typedef DWORD(CALLBACK * PGNOINTERFACE)(PDWORD);//GetNumberOfInterfaces typedef DWORD(CALLBACK * PGAINFO)(PIP_ADAPTER_INFO,PULONG);//GetAdaptersInfo typedef DWORD...
只适用于Win2000,含源程序。 用iphlpapi.dll调用不插网线也可以得到MAC地址。用NB30 NetBIOS调用,在不插网线的时候不能获取到MAC地址。
IPHelper API使用范例(13kb)
iphelper api的使用例子
在WINDOWS2000中使用IPHelper API进行动态IP的增移,设定路由指定通往哪个IP使用哪组网络接口
你可以试试IPHelper,它能快速的更改你的网络配置,很方便的实现在不同网段内IP地址等配置的切换。而且它是一款免费的绿色软件,小巧实用,特别适用于移动办公用户和需要经常在不同网段间切换的用户。
Delphi IPhelper API用法演示实例,向Delphi新手演示IPhelper API的用法,比较简单的例子,代码可在Delphi7下顺利编译。
iphelper 一款支持windows全系统的修改IP工具,可以自己选择性保存 切换IP极其方便。
本资源讲述了演示了如何获取网卡上的信息如ipv4 ipv6 mac 网关等信息还可以扫描网卡数量功能十分强大
IPhelper API的使用例子,基于Delphi环境 ..rar
更改IP,iphelper。 是您最好的选择
IPHelper2.6 - 加强了对多网卡的支持,对性能进行了优化,添加了新版本提示功能。(2003/08) IPHelper2.1 - 第一个发布版本,小巧实用的特性得到了网友们的肯定。(2002/11) 联系方式: Web: ...
ip helper code,anytao! Anytao.IPHelper.exe
iphelper库调用示例,iphelper所有功能
IPHelper,IP一键切换,IP设置
IPHelper是一款帮助您快速设置IP地址、网关、DNS及IE代理服务器等相关设置的绿色免费软件, 特别适合移动办公用户和需要经常在不同网段间切换的用户使用。作者最早开发此软件时是为了满足 自身的更改IP的需要,随后...
IPHelper-v5.2 (IP地址记忆器、查看器) IPHelper-v5.2 (IP地址记忆器、查看器) IPHelper-v5.2 (IP地址记忆器、查看器)
VB的IPHelper头声明和实例,有兴趣的朋友可以看看
iphelper相关的头文件,库文件 为什么偏偏要大于20字?
商业编程-源码-IPHelper API使用范例.zip