PDA

Ver la Versión Completa : Encontrar todas las Computadoras de una Red LAN TCP/IP


dec
01-07-2006, 00:04:30
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.


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..