Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Saber si un PC esta conectado (https://www.clubdelphi.com/foros/showthread.php?t=74839)

Alexander 14-07-2011 04:33:01

Saber si un PC esta conectado
 
Hola buen día.

Estoy buscando como saber si un PC especifico esta conectado a la red.

Muchas gracias por su apoyo.

MAXIUM 14-07-2011 05:23:10

No recuerdo el tema, pero si usas el buscador con mi nick tal vez encuentres al respuesta.

newtron 14-07-2011 09:54:14

Haciendo un ping a la ip del equipo sabes si está conectado, lo que no sé es si podrás recoger el resultado del ping de alguna forma.

Otra manera sería compartir una carpeta del equipo e intentar abrir un fichero dentro de ella.

Saludos

x_aguilarf 14-07-2011 10:28:47

Esta función te devuelve los recursos de la red :
Código Delphi [-]

type
  PNetResourceArray = ^TNetResourceArray;
  TNetResourceArray = array [0 .. 100] of TNetResource;
  TResourceType = (
    rtAny       = 0,
    rtDisk      = 1,
    rtPrint     = 2,
    rtReserved  = 8,
    rtUnknow    = DWORD($FFFFFFFF)
  );
  TResourceDisplayType = (
    rdGeneric       = $00000000,
    rdDomain        = $00000001,
    rdServer        = $00000002,
    rdShare         = $00000003,
    rdFile          = $00000004,
    rdGroup         = $00000005,
    rdNetwork       = $00000006,
    rdRoot          = $00000007,
    rdShareAdmin    = $00000008,
    rdDirectory     = $00000009,
    rdTree          = $0000000A,
    rdNdsContainer  = $0000000B
  );

function CreateNetResourceList(ResourceType: TResourceType;
  NetResource: PNetResource; out Entries: DWord;
  out List: PNetResourceArray): Boolean;
var
  EnumHandle: THandle;
  BufSize: DWord;
  Res: DWord;
begin
  Result := False;
  List := Nil;
  Entries := 0;
  if WNetOpenEnum(RESOURCE_GLOBALNET, DWord(ResourceType), 0, NetResource, EnumHandle)
    = NO_ERROR then
  begin
    try
      BufSize := $4000; // 16 kByte
      GetMem(List, BufSize);
      try
        repeat
          Entries := DWord(-1);
          FillChar(List^, BufSize, 0);
          Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
          if Res = ERROR_MORE_DATA then
          begin
            ReAllocMem(List, BufSize);
          end;
        until Res <> ERROR_MORE_DATA;

        Result := Res = NO_ERROR;
        if not Result then
        begin
          FreeMem(List);
          List := Nil;
          Entries := 0;
        end;
      except
        FreeMem(List);
        raise;
      end;
    finally
      WNetCloseEnum(EnumHandle);
    end;
  end;
end;

procedure ScanNetworkResources(ResourceType: TResourceType; DisplayType: TResourceDisplayType);

  procedure ScanLevel(NetResource: PNetResource);
  var
    Entries: DWord;
    NetResourceList: PNetResourceArray;
    i: Integer;
  begin
    if CreateNetResourceList(ResourceType, NetResource, Entries,
      NetResourceList) then
      try
        for i := 0 to Integer(Entries) - 1 do
        begin
          if (DWord(DisplayType) = RESOURCEDISPLAYTYPE_GENERIC) or
            (NetResourceList[i].dwDisplayType = DWord(DisplayType)) then
          begin


            ListBox1.Items.Add(NetResourceList^[i].lpRemoteName);


          end;
          if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
            ScanLevel(@NetResourceList[i]);
        end;
      finally
        FreeMem(NetResourceList);
      end;
  end;

begin
  ScanLevel(Nil);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ScanNetworkResources(rtDisk, rdServer);
end;

Podrías aprovechar esta función para detectar si el PC que buscas aparece en esta enumeración.

PD: Espero no haberme olvidado de ninguna parte del código...

Saludos

Lepe 14-07-2011 18:16:49

Si necesitas capturar el resultado de la línea de comando (ping), avisa y pongo el código que localicé por internet.

Saludos


La franja horaria es GMT +2. Ahora son las 22:30:03.

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