获取局域网的计算机名和IP

(1)创建一个基于对话框的应用程序

 

(2)在对话框的oninitdialog方法中添加代码

WSADATA wsd;
	WSAStartup(MAKEWORD(2,2),&wsd);
	m_grid.SetExtendedStyle(LVS_EX_FLATSB
		|LVS_EX_FULLROWSELECT
		|LVS_EX_HEADERDRAGDROP
		|LVS_EX_ONECLICKACTIVATE
		|LVS_EX_GRIDLINES);

	m_grid.InsertColumn(0,"computer name",LVCFMT_LEFT,200,0);
	m_grid.InsertColumn(1,"IP Adress",LVCFMT_LEFT,200,0);
	DWORD Count=0xFFFFFFFF,Bufsize=4096,Res;

	NETRESOURCE* nRes;
	NETRESOURCE* nRes1;
	NETRESOURCE* nRes2;
	HANDLE lphEnum;
	LPVOID Buf=new char[4096];
	LPVOID Buf1=new char[4096];
	LPVOID Buf2=new char[4096];
	Res=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,NULL,&lphEnum);
	Res=WNetEnumResource(lphEnum,&Count,Buf,&Bufsize);
	nRes=(NETRESOURCE*)Buf;

	for (DWORD n=0;n<Count;n++,nRes++)
	{
		DWORD Count1=0xFFFFFFFF;
		Res=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,nRes,&lphEnum);
		Res=WNetEnumResource(lphEnum,&Count1,Buf1,&Bufsize);
		nRes1=(NETRESOURCE*)Buf1;
		for (DWORD i=0;i<Count;i++,nRes1++)
		{
			DWORD Count2=0xFFFFFFFF;
			Res=WNetOpenEnum(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,RESOURCEUSAGE_CONTAINER,nRes1,&lphEnum);
			Res=WNetEnumResource(lphEnum,&Count2,Buf2,&Bufsize);
			nRes2=(NETRESOURCE*)Buf2;
			for (DWORD j=0;j<Count2;j++,nRes2++)
			{
				m_grid.InsertItem(j,0);
				CString sName=nRes2->lpRemoteName;
				sName=sName.Right(sName.GetLength()-2);
				m_grid.SetItemText(j,0,sName);
				CString str="";
				struct hostent *pHost;
				pHost=gethostbyname(sName);
				if (pHost==NULL)
				{
					m_grid.SetItemText(j,1,"fail to get IP Address");

				}
				else
				{
					for (int n=0;n<4;n++)
					{
						CString addr;
						if (n>0)
						{
							str+="";
						}
						addr.Format("%u",(unsigned int)((unsigned char*)pHost->h_addr_list[0])[n]);
						str+=addr;
					}
					m_grid.SetItemText(j,1,str);

				}

			}
		}
	}
	delete Buf;
	delete Buf1;
	delete Buf2;
	WNetCloseEnum(lphEnum);

(3)运行程序,如图

注意要导入mpr.lib库和ws2_32.lib库,包含afxsock.h和winnetwk.h

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值