Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Encontrar todas las Computadoras de una Red LAN TCP/IP (https://www.clubdelphi.com/foros/showthread.php?t=80655)

dec 01-07-2006 00:04:30

Encontrar todas las Computadoras de una Red LAN TCP/IP
 
Llamar a la función <b>FindComputer, </b>ésta devolverá un error de WinAPI en caso contrario.

La función llenará un StringList con los nombres de las computadoras de la RED.

Código Delphi [-]
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.

ljvenegas 25-07-2008 21:26:34

esata funcion es la

ljvenegas 25-07-2008 21:26:37

esata funcion es la

ljvenegas 25-07-2008 21:53:51

esta es la funcion que necesito pero no la puedo llamar me da el siguiente error de compilacion al click de un boton

procedure Tform1.button1click(Sender: Tobjecty);
begin
findcomputer;
//findcomp;
//findcomputers;
end;

undeclaraded identifier 'findcomputer'

te agradeceria si me puedes ayudar

gracias

hagalindo 10-11-2008 21:12:55

no funciona

FENIXadr 16-12-2010 22:38:07

si que funciona... y a la perfección... solo que hay que hacerle unos toquesitos al código.. a mi parecer está así a propósito para no dar las cosas tan servidas, porque copiar y pegar hace que solucionemos nuestros problemas y nos olvidemos del trabajo del que lo hizo, de esta manera tenemos que meternos en el código, lo entendemos y valoramos el esfuerzo de quien lo realizó. es una de las filosofías del foro y me parece muy bien..


La franja horaria es GMT +2. Ahora son las 23:27:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi