Rede - enumerando as conexoes de rede

Top  Previous  Next

// Enumerando as conexoes de rede

 

procedure TForm1.FormCreate(Sender: TObject);

var

  i               : Integer;

  Count, Size, rc : Cardinal;

  NetHandle       : THandle;

  NetResources    : Array of TNetResource;

begin

  // abre enumeração

  if WNetOpenEnum(RESOURCE_CONNECTED, RESOURCETYPE_ANY0, nil, NetHandle) <> NO_ERROR then Exit;

  try

    SetLength(NetResources,50); // tamanho inicial de NetResources

    try

      while True do

      begin

        // pega o máximo de elementos

        Count := Cardinal(-1);

        Size := Length(NetResources)*SizeOf(TNetResource);

        // pega as conexões

        rc := WNetEnumResource(NetHandle, Count, @NetResources[0], Size);

        // tamanho insuficiente. aumenta-o

        if rc = ERROR_MORE_DATA then

        begin

          SetLength(NetResources, Round(Size/Sizeof(TNetResource)+0.5));

          Continue;

        end;

        if rc <> NO_ERROR then Exit;

        // preenche a listbox

        for i := 0 to Count - 1 do

          with NetResources[i] do

              ListBox1.Items.Add(lpRemoteName)

      end;

    finally

      NetResources := Nil;

    end;

  finally

    WNetCloseEnum(NetHandle); // fecha a enumeração

  end;

end;