Retornando nome dos computadores em rede

Delphi

19/12/2006

Bom dia ....

Tive buscando no forum mais naum consegui resolver meu problema....

Gostaria de pegar o nome (apenas o nome) de todos os computadores de uma mesma rede e listar num memo

alguem poderia me ajudar?


Output

Output

Curtidas 0

Respostas

Output

Output

19/12/2006

Pessoal.... alguem me ajude....
to precisando urgente . rs


GOSTEI 0
Campsoft

Campsoft

19/12/2006

Cara, achei esse codigo em 3 minutos no google.

Testa ai, nem testei.....

Originalmente ele foi feito em d5, mais pode-se implementar.

unit FindComp;

interface

uses
  Windows, Classes;

function FindComputers: DWORD;

var
  Computers: TStringList;

implementation

uses
  SysUtils;

const
  MaxEntries = 250;

function FindComputers: DWORD;

var
  EnumWorkGroupHandle, EnumComputerHandle: THandle;
  EnumError: DWORD;
  Network: TNetResource;
  WorkGroupEntries, ComputerEntries: DWORD;
  EnumWorkGroupBuffer, EnumComputerBuffer: array[1..MaxEntries] of TNetResource;
  EnumBufferLength: DWORD;
  I, J: DWORD;

begin

  Computers.Clear;

  FillChar(Network, SizeOf(Network), 0);
  with Network do
  begin
    dwScope := RESOURCE_GLOBALNET;
    dwType := RESOURCETYPE_ANY;
    dwUsage := RESOURCEUSAGE_CONTAINER;
  end;
  
  EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @Network, EnumWorkGroupHandle);

  if EnumError = NO_ERROR then
  begin
    WorkGroupEntries := MaxEntries;
    EnumBufferLength := SizeOf(EnumWorkGroupBuffer);
    EnumError := WNetEnumResource(EnumWorkGroupHandle, WorkGroupEntries, @EnumWorkGroupBuffer, EnumBufferLength);

    if EnumError = NO_ERROR then
    begin
      for I := 1 to WorkGroupEntries do
      begin
        EnumError := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @EnumWorkGroupBuffer[I], EnumComputerHandle);
        if EnumError = NO_ERROR then
        begin
          ComputerEntries := MaxEntries;
          EnumBufferLength := SizeOf(EnumComputerBuffer);
          EnumError := WNetEnumResource(EnumComputerHandle, ComputerEntries, @EnumComputerBuffer, EnumBufferLength);
          if EnumError = NO_ERROR then
            for J := 1 to ComputerEntries do
              Computers.Add(Copy(EnumComputerBuffer[J].lpRemoteName, 3, Length(EnumComputerBuffer[J].lpRemoteName) - 2));
          WNetCloseEnum(EnumComputerHandle);
        end;
      end;
    end;
    WNetCloseEnum(EnumWorkGroupHandle);
  end;

  if EnumError = ERROR_NO_MORE_ITEMS then
    EnumError := NO_ERROR;
  Result := EnumError;

end;

initialization

  Computers := TStringList.Create;

finalization

  Computers.Free;

end.


Retirei daqui:
[url]http://www.delphi3000.com/articles/article_1845.asp?SK=network[/url]

ps.: tem que se registrar no site e logar antes.

Espero ter ajudado
Abraços.


GOSTEI 0
Output

Output

19/12/2006

Desculpe mais naum consegui e naum entendi coimo usar esta unit ...????

Tentei Memo1.Lines.Add(IntToStr(FindComputers));


GOSTEI 0
Output

Output

19/12/2006

Mais alguma dica pessoal ...?


GOSTEI 0
Marcelo

Marcelo

19/12/2006

Veja o seguinte tópico: http://forum.clubedelphi.net/viewtopic.php?t=83146


GOSTEI 0
Output

Output

19/12/2006

Resolvido .... ja consegui


GOSTEI 0
POSTAR