//Primeiro eu declaro a procedure abaixo:

procedure GetComputers(Workgroup : String;Retorno:TStrings);

Var

  EnumHandle                : THandle;

  WorkgroupRS               : TNetResource;

  Buf                       : Array[1..500] of TNetResource;

  BufSize                   : cardinal;

  Entries                   : CARDINAL;

  Result                    : dword;

 

begin

  Retorno.Clear;

  Workgroup := Workgroup + #0;

  FillChar(WorkgroupRS, SizeOf(WorkgroupRS) , 0);

  With WorkgroupRS do begin

    dwScope := 2;

    dwType := 3;

    dwDisplayType := 1;

    dwUsage := 2;

    lpRemoteName := @Workgroup[1];

  end;

  WNetOpenEnum( RESOURCE_GLOBALNET,

                RESOURCETYPE_ANY,

                0,

                @WorkgroupRS,

                EnumHandle );

 

  Repeat

    Entries := 1;

    BufSize := SizeOf(Buf);

    Result := WNetEnumResource(EnumHandle,Entries,@Buf,BufSize);

   If (Result = NO_ERROR) and (Entries = 1) then begin

      Retorno.Add(StrPas(Buf[1].lpRemoteName));

    end;

  Until (Entries <> 1) or (Result <> NO_ERROR);

  WNetCloseEnum(EnumHandle);

end;  { Find All computers }

//===================

 

//Exemplo de uso:

 

GetComputers(MSHOME,Memo1.Lines);