WNetOpenEnum( dwScope , NULL , NULL , NULL , &hEnum );
WNetEnumResource( hEnum, &Count ,Buffer, &BufferSize); 
用这两个函数我已经取得了工作组内的所有计算机,仅仅是工作组内的,
我没办法在深入取得局域网内所有的计算机了,
但是我用NetServerEnum这个函数取得了局域网内所有的工作组的名字,就无法在继续下去了.
是不是操作系统里面要设置什么?

解决方案 »

  1.   

    BOOL WINAPI EnumerateFunc(HWND hwnd, 
                              HDC hdc, 
                              LPNETRESOURCE lpnr)

      DWORD dwResult, dwResultEnum;
      HANDLE hEnum;
      DWORD cbBuffer = 16384;      // 16K is a good size
      DWORD cEntries = -1;         // enumerate all possible entries
      LPNETRESOURCE lpnrLocal;     // pointer to enumerated structures
      DWORD i;
      //
      // Call the WNetOpenEnum function to begin the enumeration.
      //
      dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, // all network resources
                              RESOURCETYPE_ANY,   // all resources
                              0,        // enumerate all resources
                              lpnr,     // NULL first time the function is called
                              &hEnum);  // handle to the resource  if (dwResult != NO_ERROR)
      {  
        //
        // Process errors with an application-defined error handler.
        //
        NetErrorHandler(hwnd, dwResult, (LPSTR)"WNetOpenEnum");
        return FALSE;
      }
      //
      // Call the GlobalAlloc function to allocate resources.
      //
      lpnrLocal = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer);
      if (lpnrLocal == NULL) 
          return FALSE;
      
      do
      {  
        //
        // Initialize the buffer.
        //
        ZeroMemory(lpnrLocal, cbBuffer);
        //
        // Call the WNetEnumResource function to continue
        //  the enumeration.
        //
        dwResultEnum = WNetEnumResource(hEnum,      // resource handle
                                        &cEntries,  // defined locally as -1
                                        lpnrLocal,  // LPNETRESOURCE
                                        &cbBuffer); // buffer size
        //
        // If the call succeeds, loop through the structures.
        //
        if (dwResultEnum == NO_ERROR)
        {
          for(i = 0; i < cEntries; i++)
          {
            // Call an application-defined function to
            //  display the contents of the NETRESOURCE structures.
            //
            DisplayStruct(hdc, &lpnrLocal[i]);        // If the NETRESOURCE structure represents a container resource, 
            //  call the EnumerateFunc function recursively.        if(RESOURCEUSAGE_CONTAINER == (lpnrLocal[i].dwUsage
                                           & RESOURCEUSAGE_CONTAINER))
              if(!EnumerateFunc(hwnd, hdc, &lpnrLocal[i]))
                TextOut(hdc, 10, 10, "EnumerateFunc returned FALSE.", 29);
          }
        }
        // Process errors.
        //
        else if (dwResultEnum != ERROR_NO_MORE_ITEMS)
        {
          NetErrorHandler(hwnd, dwResultEnum, (LPSTR)"WNetEnumResource");
          break;
        }
      }
      //
      // End do.
      //
      while(dwResultEnum != ERROR_NO_MORE_ITEMS);
      //
      // Call the GlobalFree function to free the memory.
      //
      GlobalFree((HGLOBAL)lpnrLocal);
      //
      // Call WNetCloseEnum to end the enumeration.
      //
      dwResult = WNetCloseEnum(hEnum);
      
      if(dwResult != NO_ERROR)
      { 
        //
        // Process errors.
        //
        NetErrorHandler(hwnd, dwResult, (LPSTR)"WNetCloseEnum");
        return FALSE;
      }  return TRUE;
    }
      

  2.   

    lpnr  请问这个参数如何初始化?