BOOL CCheckNetWorkDlg::EnumerateNetHood(LPNETRESOURCE lpnr)
{    DWORD dwRet, dwRetEnum;
    HANDLE hEnum; 
    DWORD cbBuffer = 16384;
    DWORD cEntries = 0xFFFFFFFF;
    LPNETRESOURCE lpnrLocal;
    DWORD i;    CString str;
    int    nLevel = -1;
    CString strDisplayName;
    CString strTrueName;
    
    dwRet = WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpnr, &hEnum );
    if(dwRet == WN_FUNCTION_BUSY || dwRet == ERROR_BAD_NET_NAME)
        return TRUE;    if(dwRet != NO_ERROR) return FALSE;
    
    do 
    {
        lpnrLocal = (LPNETRESOURCE)GlobalAlloc( GPTR, cbBuffer );
        dwRetEnum = WNetEnumResource( hEnum, &cEntries, lpnrLocal, &cbBuffer);
        if( dwRetEnum == NO_ERROR) 
        {
            str.LoadString(IDS_NETWORK_PROVIDER);            for( i = 0; i < cEntries; i++ ) 
            {
    //          ProcessMessages();                // 只搜索网络提供者为"Microsoft Network"的资源
                int nCmpNo = lstrcmpi( (LPCTSTR)lpnrLocal[i].lpProvider, (LPCTSTR)str);
                if( nCmpNo ) continue;                // 只包括 Containaer 资源, 共享磁盘和打印机不具有 RESOURCEUSAGE_CONTAINER 属性
                if( RESOURCEUSAGE_CONTAINER ==(lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER)) 
                {
                    nLevel = -1;
                    switch( lpnrLocal[i].dwDisplayType) 
                    {
                    case RESOURCEDISPLAYTYPE_NETWORK:        // 整个网络
                        nLevel = 0;
                        strDisplayName.LoadString(IDS_ENTIRNET);
                        strTrueName = "*";
                        break;                    case RESOURCEDISPLAYTYPE_DOMAIN:        // 工作组
                        nLevel = 1;
                        strTrueName.LoadString(IDS_WORKGROUP);
                        strDisplayName.Format( "%s%s", lpnrLocal[i].lpRemoteName, strTrueName );
                        strTrueName = lpnrLocal[i].lpRemoteName;
                        break;                    case RESOURCEDISPLAYTYPE_SERVER:        // 计算机
                        nLevel = 2;
                        strDisplayName.Format( "%s", lpnrLocal[i].lpRemoteName + 2 );// 加2是为去掉前缀"//"
                        strTrueName = strDisplayName;

struct hostent *host;
struct in_addr *ptr; // To retrieve the IP Address

WSADATA wsaData;  
WSAStartup(MAKEWORD(1,1),&wsaData); host = gethostbyname(strTrueName);

ptr = (struct in_addr *) host->h_addr_list[0]; int a,b,c,d;
CString strTemp;
a= ptr->S_un.S_un_b.s_b1;  // Eg. 211.40.35.76 split up like this.
b = ptr->S_un.S_un_b.s_b2;  //     40
c = ptr->S_un.S_un_b.s_b3;  //     35
d = ptr->S_un.S_un_b.s_b4;  //     76
strTemp.Format("%d.%d.%d.%d",a,b,c,d);
strTrueName.Format("%s(%s)",strTrueName,strTemp);
WSACleanup();
                        break;
                    //default:
                      //  break;
                    }
                    ASSERT( nLevel != -1 );                    //调用你的处理函数,我是将其放入列表框中
//                    InsertItem (nLevel,strTrueName, strDisplayName);
m_List.AddString(strTrueName);                    if(!EnumerateNetHood(&lpnrLocal[i])) return FALSE;
                }
            }
        }
        else
            if( dwRetEnum != ERROR_NO_MORE_ITEMS )
                return FALSE;
    } 
    while( dwRetEnum != ERROR_NO_MORE_ITEMS );
    
    GlobalFree( (HGLOBAL)lpnrLocal );
    dwRet = WNetCloseEnum( hEnum );
    if( dwRet != NO_ERROR )
        return FALSE;
    
    return TRUE;
}