MFC获取本机的信息(包括网关,子网掩码等一下信息)

#define MAX_ADAPTER_NAME_LENGTH 256  
#define MAX_ADAPTER_DESCRIPTION_LENGTH 128  
#define MAX_ADAPTER_ADDRESS_LENGTH 8  


//表示IP的结构
typedef struct  
{  
char String[4*4];  
} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;  


typedef struct _IP_ADDR_STRING  
{  
struct _IP_ADDR_STRING* Next;  //下一个节点
IP_ADDRESS_STRING IpAddress;  //IP地址
IP_MASK_STRING IpMask;  //子网掩码
DWORD Context;  
} IP_ADDR_STRING, *PIP_ADDR_STRING;  


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];  //MAC地址
DWORD Index;  //网络接口索引号
UINT Type;  //网络接口类型
UINT DhcpEnabled;  //是否启用DHCP
PIP_ADDR_STRING CurrentIpAddress; //当前IP地址 
IP_ADDR_STRING IpAddressList;  //IP地址列表
IP_ADDR_STRING GatewayList;  //网关地址列表
IP_ADDR_STRING DhcpServer;  //DHCP服务器地址
BOOL HaveWins;  //是否启动了Wins服务
IP_ADDR_STRING PrimaryWinsServer;  //主Wins服务地址
IP_ADDR_STRING SecondaryWinsServer;  //次Wins服务
time_t LeaseObtained;  //DHCP租赁时间
time_t LeaseExpires;  //DHCP租赁失效时间
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;  




//声明iphlpapi.dll中需要调用参数的调用方式为__stdcall,及参数类型

typedef DWORD (__stdcall* PGAINFO)(PIP_ADAPTER_INFO, PULONG);  




void CLocalHostInfo::GetLocalInfo()
{
UpdateData(TRUE);
HMODULE hInst = LoadLibrary("iphlpapi.dll");  
if(!hInst)  
AfxMessageBox("iphlpapi.dll no supported in this platform!\n");  
PGAINFO pGAInfo = (PGAINFO)GetProcAddress(hInst, "GetAdaptersInfo");  //检索指定的iphlpapi.dll动态链接库(DLL)中的输出库函数地址
if(pGAInfo == NULL)  
{  
AfxMessageBox("can't found GetAdapterInfo function!\n");  
exit(0);  
}  
ULONG ulSize = 0;  
PIP_ADAPTER_INFO pInfo=NULL, d=NULL;  
while(pGAInfo(pInfo, &ulSize) != ERROR_SUCCESS)  
{  
delete pInfo;  
int eSize = ulSize/sizeof(IP_ADAPTER_INFO);  
if(ulSize%sizeof(IP_ADAPTER_INFO))  
{  
eSize++;  
}  
pInfo = (PIP_ADAPTER_INFO)new(IP_ADAPTER_INFO[eSize]);  
}  
//GetAdapterInfo返回的是一个键表结构的网卡信息,可以用循环遍历得到每一个网卡的信息  
int nCount = 0;
d=pInfo;
for(d=pInfo; d!=NULL; d=d->Next)  
{  


CString szNetInfo;  
szNetInfo.Format("%s", d->Description); 
++nCount;
m_Adapter.AddString(szNetInfo);
        if(nCount != 3)
{
m_ip.Format("%s", d->IpAddressList.IpAddress.String); 
m_mask.Format("%s", d->IpAddressList.IpMask.String);  
m_Gateway.Format("%s", d->GatewayList.IpAddress.String);
m_mac.Format("%02X-%02X-%02X-%02X-%02X-%02X", d->Address[0], d->Address[1],   
                                             d->Address[2], d->Address[3], 
 d->Address[4], d->Address[5]);    
}
UpdateData(FALSE);
   

}  
m_Adapter.SetCurSel(0);




/*
        算法: 
        1. 子网掩码与IP地址进行位与运算,得处网络地址
        2. 网络地址 | (~子网掩码),得出广播地址
      */
/*
in_addr broadcast;
string ip,mask;
ip = m_ip.GetBuffer(0);
mask = m_mask.GetBuffer(0);
broadcast.S_un.S_addr =  (
inet_addr(ip.c_str()) 
& inet_addr(mask.c_str())
)
| (~inet_addr(mask.c_str()));
    CString  broadcastIP= inet_ntoa(broadcast);


*/
delete []pInfo;  
delete []d;  
    FreeLibrary(hInst); 
}


BOOL CLocalHostInfo::OnInitDialog() 
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
GetLocalInfo();
return TRUE;  // return TRUE unless you set the focus to a control
             // EXCEPTION: OCX Property Pages should return FALSE
}



特别说明:上面的一下变量m_这类型的都是MFC控件定义的。还有就是上面的一下可以需要一些库文件,看看需要什么自己下载加上就行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值