Fórum Retornando nome dos computadores em rede #334916

19/12/2006

0

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

Responder

Posts

19/12/2006

Output

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


Responder

Gostei + 0

19/12/2006

Campsoft

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.


Responder

Gostei + 0

19/12/2006

Output

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

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


Responder

Gostei + 0

20/12/2006

Output

Mais alguma dica pessoal ...?


Responder

Gostei + 0

21/12/2006

Marcelo

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


Responder

Gostei + 0

21/12/2006

Output

Resolvido .... ja consegui


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar