这是以前的问题了,我把它给你贴在这里了,
你看看行不行:
BOOL CMyApp::GetLocalNetWorkInfo()
{
  HKEY    hKey;
  DWORD    dwDataType;
  DWORD    dwLength;
  LONG    lRet;  // 读取注册表中的网络信息
  lRet = ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, (LPCTSTR)gcszNetWorkRegKey, 0, KEY_READ, &hKey );
  if( lRet != ERROR_SUCCESS ) {
    AfxMessageBox( IDS_INIT_ERROR_1, MB_OK ¦ MB_ICONSTOP );
    return FALSE;
  }  // 得到"工作组"名
  dwLength = 50;
  lRet = ::RegQueryValueEx( hKey, gcszWorkGroup, NULL, &dwDataType,  (LPBYTE)m_szWorkGroup, &dwLength );
  if( lRet != ERROR_SUCCESS ) {
    AfxMessageBox( IDS_INIT_ERROR_1, MB_OK ¦ MB_ICONSTOP );
    return FALSE;
  }  // 得到"计算机"名
  dwLength = 50;
  lRet = ::RegQueryValueEx( hKey, gcszComputerName, NULL, &dwDataType, (LPBYTE)m_szComputerName,  &dwLength );
  if( lRet != ERROR_SUCCESS ) {
    AfxMessageBox( IDS_INIT_ERROR_1, MB_OK ¦ MB_ICONSTOP );
    return FALSE;
  }  lRet = ::RegCloseKey( hKey );
  if( lRet != ERROR_SUCCESS ) {
    AfxMessageBox( IDS_INIT_ERROR_1, MB_OK ¦ MB_ICONSTOP );
    return FALSE;
  }  // 递归搜索"网络邻居"的层次树, 并填充到 m_InfoNetHood
  if( !EnumerateNetHood( (LPNETRESOURCE)NULL ) )
    return FALSE;
  m_timePrev = CTime::GetCurrentTime();  return TRUE;
}
BOOL CMyApp::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 ) { 
    NetErrorMessageBox( dwRet, "WNetOpenEnum" );
        return FALSE;
  }
  
  do {
    lpnrLocal = (LPNETRESOURCE)GlobalAlloc( GPTR, cbBuffer );
    dwRetEnum = WNetEnumResource( hEnum, &cEntries, lpnrLocal, &cbBuffer);
    if( dwRetEnum == NO_ERROR) {
      for( i = 0; i < cEntries; i++ ) {
        
        // 只搜索网络提供者为"Microsoft Network"的资源
        str="Microsoft Network";
        int nCmpNo = lstrcmpi( (LPCTSTR)lpnrLocal[i].lpProvider, (LPCTSTR)str );
        if( nCmpNo )
          continue;        // 只包括 Container 资源, 共享磁盘、打印机不具有 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;
              // 加 2 是为去掉前缀"//"
              strDisplayName.Format( "%s", lpnrLocal[i].lpRemoteName + 2 );
              strTrueName = strDisplayName;
              break;
          }
          ASSERT( nLevel != -1 );
          NewInfoNetHood( nLevel, strTrueName, strDisplayName );          if( !EnumerateNetHood( &lpnrLocal[i] ) ) 
            return FALSE;
        }
            }
    }
    else
      if( dwRetEnum != ERROR_NO_MORE_ITEMS ) {
        NetErrorMessageBox( dwRetEnum, "WNetEnumResource" );
        return FALSE;
      }
  } 
    while( dwRetEnum != ERROR_NO_MORE_ITEMS );
    
  GlobalFree( (HGLOBAL)lpnrLocal );
  dwRet = WNetCloseEnum( hEnum );
  if( dwRet != NO_ERROR ) {
    NetErrorMessageBox( dwRet, "WNetCloseEnum" );
    return FALSE;
  }
  
  return TRUE;