Как узнать доступные сетевые ресурсы?

Решение:

type
  PNetResourceArray = ^TNetResourceArray;
  TNetResourceArray = array[0..MaxInt div SizeOf(TNetResource) - 1]
                        of TNetResource;

procedure EnumResources(LpNR: PNetResource);
var
  NetHandle: THandle;
  I, BufSize, NetResult: Integer;
  NetResources: PNetResourceArray;
  NewItem: TListItem;
  Count, Size: DWORD;
begin
  if WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, LpNR,
                  NetHandle) <> NO_ERROR then Exit;
  try
    BufSize := 50 * SizeOf(TNetResource);
    GetMem(NetResources, BufSize);
    try
      while True do begin
        Count := $FFFFFFFF;
        Size := BufSize;
        NetResult := WNetEnumResource(NetHandle, Count, NetResources, Size);

        if NetResult = ERROR_MORE_DATA then begin
          BufSize := Size;
          ReallocMem(NetResources, BufSize);
          Continue;
        end;
        if NetResult <> NO_ERROR then Exit;
        for I := 0 to Count-1 do begin
          with NetResources^[I] do begin
            if RESOURCEUSAGE_CONTAINER = (DwUsage and RESOURCEUSAGE_CONTAINER) then
              EnumResources(@NetResources^[I]);
            if dwDisplayType = RESOURCEDISPLAYTYPE_SHARE then begin
// ^^^^^^^^^^^^^^^^^^^^^^^^^ - ресурс
// RESOURCEDISPLAYTYPE_SERVER - компьютер
// RESOURCEDISPLAYTYPE_DOMAIN - рабочая группа
// RESOURCEDISPLAYTYPE_GENERIC - сеть
               NewItem := Form1.ListView1.Items.Add;
               NewItem.Caption := LpRemoteName;
            end;
          end;
        end;
      end;
    finally
      FreeMem(NetResources, BufSize);
    end;
  finally
    WNetCloseEnum(NetHandle);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  OldCursor: TCursor;
begin
  OldCursor := Screen.Cursor;
  Screen.Cursor := crHourGlass;
  with ListView1.Items do begin
    BeginUpdate;
    Clear;
    EnumResources(nil);
    EndUpdate;
  end;
  Screen.Cursor := OldCursor;
end;
[Nomadic]

Примечание
Добавляем в uses модуль ComCtrls.