Environment: [eg VC6 SP4, NT4 SP3, winCE 2.0]
You can use this code to retrieve the host information in a network and
also get the IP address of each pc. Its something similar to what you see
in the Network Neighbourhood list. All luck.
1) Include winsock2.h
2) In the Menu, go to Project–>Settings and in the Link tab, you can see a
text box named Object/Library Modules. In that, add ws2_32.lib mpr.lib to the
existing entries there. Those 2 libraries have to be added for this code snippet
to compile without any linker errors.
CString strTemp;
struct hostent *host;
struct in_addr *ptr; // To retrieve the IP AddressDWORD dwScope = RESOURCE_CONTEXT;
NETRESOURCE *NetResource = NULL;
HANDLE hEnum;
WNetOpenEnum( dwScope, NULL, NULL, NULL, &hEnum );WSADATA wsaData;
WSAStartup(MAKEWORD(1,1),&wsaData);if ( hEnum )
{
DWORD Count = 0xFFFFFFFF;
DWORD BufferSize = 2048;
LPVOID Buffer = new char[2048];
WNetEnumResource( hEnum, &Count, Buffer, &BufferSize );
NetResource = (NETRESOURCE*)Buffer;char szHostName[200];
for ( unsigned int i = 0; i < BufferSize/sizeof(NETRESOURCE); i++, NetResource++ ) { if ( NetResource->dwUsage == RESOURCEUSAGE_CONTAINER &&
NetResource->dwType == RESOURCETYPE_ANY )
{
if ( NetResource->lpRemoteName )
{
CString strFullName = NetResource->lpRemoteName;
if ( 0 == strFullName.Left(2).Compare(“\\\\”) )
strFullName = strFullName.Right(strFullName.GetLength()-2);
gethostname( szHostName, strlen( szHostName ) );
host = gethostbyname(strFullName);
if(host == NULL) continue;
ptr = (struct in_addr *) host->h_addr_list[0];// Eg. 211.40.35.76 split up like this.
int a = ptr->S_un.S_un_b.s_b1; // 211
int b = ptr->S_un.S_un_b.s_b2; // 40
int c = ptr->S_un.S_un_b.s_b3; // 35
int d = ptr->S_un.S_un_b.s_b4; // 76strTemp.Format(“%s –> %d.%d.%d.%d”,strFullName,a,b,c,d);
AfxMessageBox(strTemp);
}
}
}
delete Buffer;
WNetCloseEnum( hEnum );
}WSACleanup();
// End of Code