如題

解决方案 »

  1.   


    //这是本版一位网友提供的链接,我拷贝给你。大家share!            用VC列表显示所有网上邻居网上邻居的查找在www.codeguru.com上有例子,只是它 
    把它做成了类,本是好事,但对大家理解它的原理增加了难度, 
    所以现在把它实现在一对话框中,以便大家能一目了然。 #include <winnetwk.h> #pragma comment(lib, “mpr.lib”) 
    BOOL CNetEnum2Dlg::Enumerate(LPNETRESOURCE lpNetRC_p) 

    HANDLE hEnum = 0; 
    DWORD dwScope = RESOURCE_GLOBALNET ; 
    DWORD dwType = RESOURCETYPE_ANY ; DWORD dwResult = WNetOpenEnum( 
    dwScope, // scope of enumeration 
    dwType, // resource types to list 
    0, // enumerate all resources 
    lpNetRC_p, // pointer to resource structure (NULL at first time) 
    &hEnum // handle to resource 
    ) ; if( dwResult != NO_ERROR ) 
    return FALSE; 
    DWORD dwBuffer = 16384 ; // 16K is reasonable size 
    DWORD dwEntries = 0xFFFFFFFF ; // enumerate all possible entries 
    LPNETRESOURCE lpnrLocal = 0; BOOL bRet = TRUE; //try 

    do 

    // first allocate buffer for NETRESOURCE structures ... 
    lpnrLocal = (LPNETRESOURCE) GlobalAlloc( GPTR, dwBuffer ) ; dwResult = WNetEnumResource( 
    hEnum, // resource-handle 
    &dwEntries, 
    lpnrLocal, 
    &dwBuffer 
    ) ; if( dwResult == NO_ERROR ) 

    for( register DWORD i = 0 ; i 

    CString nsname; 
    nsname = lpnrLocal[i].lpRemoteName; 
    nsname += " "; 
    nsname +=lpnrLocal[i].lpLocalName; 
    nsname += " "; 
    nsname +=lpnrLocal[i].lpComment; 
    m_netList.AddString(nsname); // m_netList defined in NetEnumDlg2.h : CListBox m_netList; 
    if( RESOURCEUSAGE_CONTAINER == 
    (lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER) && 
    lpnrLocal[i].dwDisplayType != RESOURCEDISPLAYTYPE_SERVER ) 
    if( !Enumerate( &lpnrLocal[i]) ) 

    //TRACE0( "CNetwork::Enumerate(): recursiv call failed\n" ); 
    //throw CNetworkBreak(FALSE); 
    return FALSE; 
    } } 
    } else if( dwResult != ERROR_NO_MORE_ITEMS ) 

    //AfxMessageBox("WNetEnumResource"); 
    return FALSE; 

    } while( dwResult != ERROR_NO_MORE_ITEMS ); 
    } if( lpnrLocal ) 
    GlobalFree((HGLOBAL) lpnrLocal) ; WNetCloseEnum(hEnum) ; return bRet; 
    } void CNetEnum2Dlg::OnListWNet() 

    Enumerate(0);