二、编辑对话框资源 控件ID及标题 IDC_LIST_IP
IDC_GETOTHERIP 获取局域网其它计算机的IP地址(属性有“浮动”)
三、添加变量、函数 1、添加变量
2、添加消息响应函数
四、添加代码
1、于“GetOtherIPDlg.cpp”文件内添加包含语句 #include \"stdafx.h\" #include \"GetOtherIP.h\" #include \"GetOtherIPDlg.h\" #include 2、于“GetOtherIPDlg.cpp”文件内添加消息响应函数代码 void CGetOtherIPDlg::OnGetotherip() { // TODO: Add your control notification handler code here struct hostent *host; struct in_addr *ptr; // 检索IP地址 DWORD dwScope = RESOURCE_CONTEXT; NETRESOURCE *NetResource = NULL; HANDLE hEnum; WNetOpenEnum( dwScope, NULL, NULL, NULL, &hEnum ); WSADATA wsaData; WSAStartup(MAKEWORD(1,1),&wsaData); CString strTemp; if ( hEnum ) { DWORD Count = 0xFFFFFFFF; DWORD BufferSize = 2048; LPVOID Buffer = new char[2048]; WNetEnumResource( hEnum, &Count, Buffer, &BufferSize ); NetResource = (NETRESOURCE*)Buffer; strTemp.Format(\"局域网内的计算机名称及其IP地址为:\"); m_ListIP.AddString(strTemp); char szHostName[200]; unsigned int i; for ( 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]; // =. 分隔开IP:211.40.35.76. 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; // 76 strTemp.Format(\" 计算机%d名称:%s-->IP地址:%d.%d.%d.%d\\r\\n\i,strFullName,a,b,c,d); m_ListIP.AddString(strTemp); } } } //for 循环结束 delete Buffer; WNetCloseEnum( hEnum ); } //第一层 if 结束 WSACleanup(); //调用WSACleanup函数进行WinSock的清理工作,以便释放其占用的资源 } 五、添加对象/库模块 点“工程”,点“设置”,点选“连接”,添加“MPR.LIB ws2_32.lib.”模块。 六、编译 七、运行 七、函数说明 1、WNetOpenEnum函数声明 DWORD WNetOpenEnum(DWORD dwScope,DWORD dwType,DWORD dwUsage,LPNETRESOURCE lpNetResource,LPHANDKE lphEnum) dwScope:指定列举范围。 dwType:指定列举资源类型。 dwUsage:指定列举资源用法。第一个参数dwScope为RESOURCE_GLOBALNET,则该参数被勿略。 lpNetResource:指向包含列举资源相关信息之NETRESOURCE结构的指针。 lphEnum:指向列举变量之句柄指针,为调用WNetEnumResource()函数做准备。 功能:开始一网络资源或存在的网络连接枚举值。成功则返回非零值;失败则返回FALSE。 2、WNetEnumResource函数声明 DWORD WNetEnumResource(HANDLE hEnum,LPDWORD lpcCount,LPVOID lpBuffer,LPDWORD lpBufferSize) hEnum:WNetOpenEnum()函数返回的标识某枚举实例之句柄。 lpcCount:指定枚举条目数量。 lpBuffer:指向取得枚举结果之缓冲区指针,用NETRESOURCE结构数 组表示。 lpBufferSize:指定上述缓冲区大小。 功能:获取详细网络资源信息。 3、NETRESOURCE结构定义 typedef struct_NETRESOURCE{ DWORD dwScope; //指定列举范围 DWORD dwType; //指定列举资源类型 DWORD dwDisplayType; DWORD dwUsage; //指定列举资源用法 DWORD dwScopeLocalname; DWORD dwRemoteName; //指向网络中远程计算机名 DWORD dwComment; DWORD dwPrivider; }NETRESOURCE 因篇幅问题不能全部显示,请点此查看更多更全内容