呵呵。MSDN里面有!!!!!!!!!!!!!1

解决方案 »

  1.   

    NETRESOURCE
    The NETRESOURCE structure is returned during enumeration of resources on the network and during enumeration of currently connected resources. typedef struct _NETRESOURCE {  // nr 
        DWORD  dwScope; 
        DWORD  dwType; 
        DWORD  dwDisplayType; 
        DWORD  dwUsage; 
        LPTSTR lpLocalName; 
        LPTSTR lpRemoteName; 
        LPTSTR lpComment; 
        LPTSTR lpProvider; 
    } NETRESOURCE; 
     
    Members
    dwScope 
    Specifies the scope of the enumeration. Currently, this member can be one of the following values: Value Meaning 
    RESOURCE_CONNECTED Currently connected resources (the dwUsage member is undefined). 
    RESOURCE_GLOBALNET Resources on the network. 
    RESOURCE_REMEMBERED Remembered (persistent) connections (dwUsage is undefined). 
    dwType 
    Specifies a bitmask that gives the resource type. Currently, this member can be one of the following values: Value Meaning 
    RESOURCETYPE_ANY All resources 
    RESOURCETYPE_DISK Disk resources 
    RESOURCETYPE_PRINT Print resources 
    dwDisplayType 
    Specifies how the network object should be displayed in a network browsing user interface. Currently, this member can be the following values: Value Meaning 
    RESOURCEDISPLAYTYPE_DOMAIN 
     The object should be displayed as a domain. 
    RESOURCEDISPLAYTYPE_GENERIC 
     The method used to display the object does not matter. 
    RESOURCEDISPLAYTYPE_SERVER 
     The object should be displayed as a server. 
    RESOURCEDISPLAYTYPE_SHARE 
     The object should be displayed as a sharepoint. 
    dwUsage 
    Specifies a bitmask that gives the resource usage. This member is defined only if dwScope is RESOURCE_GLOBALNET. Currently, this member can be one of the following values: Value Meaning 
    RESOURCEUSAGE_CONNECTABLE This is a connectable resource; the name pointed to by the lpRemoteName member can be passed to the WNetAddConnection function to make a network connection. 
    RESOURCEUSAGE_CONTAINER This is a container resource; the name pointed to by the lpRemoteName member can be passed to the WNetOpenEnum function to enumerate the resources in the container. 
    lpLocalName 
    Points to the name of a local device if the dwScope member is RESOURCE_CONNECTED or RESOURCE_REMEMBERED. This member is NULL if the connection does not use a device. Otherwise, it is undefined. 
    lpRemoteName 
    Points to a remote network name if the entry is a network resource. 
    If the entry is a current or persistent connection, lpRemoteName points to the network name associated with the name pointed to by the lpLocalName member. lpComment 
    Points to a provider-supplied comment. 
    lpProvider 
    Points to the name of the provider owning this resource. This member can be NULL if the provider name is unknown. 
    QuickInfo
      Windows NT: Use version 3.1 or later.
      Windows: Use Windows 95 or later.
      Windows CE: Use version 2.0 or later.
      Header: Declared in winnetwk.h.See Also
    Windows Networking (WNet) Overview, Windows Networking Structures, WNetAddConnection, WNetCloseEnum, WNetEnumResource, WNetOpenEnum  
      

  2.   

    我当然知道msdn里面有,但是不理解,你编过这样的程序吗?
      

  3.   

    BOOL CNetwork :: Enumerate( LPNETRESOURCE lpNetRC_p, DWORD dwFlags_p ) {
    HANDLE hEnum = 0;
    DWORD dwScope = RESOURCE_GLOBALNET ;
    if( dwFlags_p & CONNECTED )
    dwScope = RESOURCE_CONNECTED ;
    else if( dwFlags_p & REMEMBERED )
    dwScope = RESOURCE_REMEMBERED ;
    // else GLOBALNET ... DWORD dwType = RESOURCETYPE_ANY ;
    if( dwFlags_p & TYPE_DISK )
    dwType = RESOURCETYPE_DISK ;
    else if( dwFlags_p & TYPE_PRINT )
    dwType = RESOURCETYPE_PRINT ;
    // else TYPE_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 NetError(dwResult, TEXT("WNetOpenEnum")); 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 < dwEntries ; i++ ) {
    if( ! OnHitResource( lpnrLocal[i] ) ) {
    TRACE0("CNetwork::Enumerate(): OnHitResource() breaks enumeration\n");
    throw CNetworkBreak(FALSE) ;
    }
    if( RESOURCEUSAGE_CONTAINER == 
    (lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER) &&
    lpnrLocal[i].dwDisplayType != RESOURCEDISPLAYTYPE_SERVER ) 
    if( !Enumerate( &lpnrLocal[i], dwFlags_p ) ) {
    TRACE0( "CNetwork::Enumerate(): recursiv call failed\n" );
    throw CNetworkBreak(FALSE);
    }  }
    } else if( dwResult != ERROR_NO_MORE_ITEMS ) {
    throw CNetworkError(NetError(dwResult, TEXT("WNetEnumResource")));
    }
    } while( dwResult != ERROR_NO_MORE_ITEMS );
    } catch( CNetworkError err ) {
    bRet = err.m_bRet;
    } if( lpnrLocal )
    GlobalFree((HGLOBAL) lpnrLocal) ;

    WNetCloseEnum(hEnum) ; return bRet;
    }
    这段程序当中,一直要等到if( RESOURCEUSAGE_CONTAINER == 
    (lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER) &&
    lpnrLocal[i].dwDisplayType != RESOURCEDISPLAYTYPE_SERVER ) 才开始列举网络,这是为什么呀?