IP ou nome da máquina

Discussão em 'Progress 4GL' iniciado por af.dums, Fevereiro 27, 2009.

  1. af.dums

    af.dums Membro Ativo

    Bom dia, alguém sabe me dizer como posso pegar o nome ou o ip da maquina que está executando um programa?

    Obrigado

    Att,
    Anderson
  2. pedro_lemes

    pedro_lemes Membro Participativo

    PROCEDURE TcpIp :
    DEFINE OUTPUT PARAMETER p-TcpName AS CHARACTER FORMAT "X(70)".
    DEFINE OUTPUT PARAMETER p-TcpAddr AS CHARACTER FORMAT "X(70)".

    &SCOPED-DEFINE WSADATA_LENGTH 403
    &SCOPED-DEFINE HOSTENT_ADDR_LIST 13 /* CHAR**(4) */


    DEF VAR w-TcpName AS CHARACTER NO-UNDO.
    DEF VAR w-Length AS INTEGER NO-UNDO.
    DEF VAR w-Return AS INTEGER NO-UNDO.
    DEF VAR ptr-WsaData AS MEMPTR NO-UNDO.
    DEF VAR w-Hostent AS INTEGER NO-UNDO.
    DEF VAR ptr-Hostent AS MEMPTR NO-UNDO.
    DEF VAR ptr-AddrString AS MEMPTR NO-UNDO.
    DEF VAR ptr-AddrList AS MEMPTR NO-UNDO.
    DEF VAR ptr-ListEntry AS MEMPTR NO-UNDO.
    DEF VAR w-TcpLong AS INTEGER NO-UNDO.

    /* Allocate work structure for WSADATA */
    SET-SIZE(ptr-WsaData) = {&WSADATA_LENGTH}.

    /* Ask Win32 for winsock usage */
    RUN WSAStartup (INPUT 257, INPUT GET-POINTER-VALUE(ptr-WsaData), OUTPUT w-Return).

    /* Release allocated memory */
    SET-SIZE(ptr-WsaData) = 0.

    /* Check for errors */
    IF w-Return NE 0 THEN DO:
    MESSAGE "Erro Accessando WINSOCK" VIEW-AS ALERT-BOX.
    RETURN.
    END.

    /* Set up variables */
    ASSIGN w-Length = 100
    w-TcpName = FILL(" ", w-Length).

    /* Call Win32 routine to get host name */
    RUN gethostname (OUTPUT w-TcpName,INPUT w-Length, OUTPUT w-Return).

    /* Check for errors */
    IF w-Return NE 0 THEN DO:
    MESSAGE "Erro Recuperando o Nome." VIEW-AS ALERT-BOX.
    RUN WSACleanup (OUTPUT w-Return).
    RETURN.
    END.

    /* Pass back gathered info */
    /* remember: the string is null-terminated so there is a CHR(0)
    inside w-TcpName. We have to trim it: */
    p-TcpName = ENTRY(1,w-TcpName,CHR(0)).

    /* Call Win32 routine to get host address */
    RUN gethostbyname (INPUT w-TcpName, OUTPUT w-Hostent).

    /* Check for errors */
    IF w-Hostent EQ 0 THEN DO:
    MESSAGE "Erro Resolvendo host name." VIEW-AS ALERT-BOX.
    RUN WSACleanup (OUTPUT w-Return).
    RETURN.
    END.

    /* Set pointer to HostEnt data structure */
    SET-POINTER-VALUE(ptr-Hostent) = w-Hostent.

    /* "Chase" pointers to get to first address list entry */
    SET-POINTER-VALUE(ptr-AddrList) = GET-LONG(ptr-Hostent,
    {&HOSTENT_ADDR_LIST}).
    SET-POINTER-VALUE(ptr-ListEntry) = GET-LONG(ptr-AddrList, 1).
    w-TcpLong = GET-LONG(ptr-ListEntry, 1).

    RUN inet_ntoa (INPUT w-TcpLong,
    OUTPUT ptr-AddrString).

    /* Pass back gathered info */
    p-TcpAddr = GET-STRING(ptr-AddrString, 1).

    /* Terminate winsock usage */
    RUN WSACleanup (OUTPUT w-Return).
    END PROCEDURE.

    PROCEDURE gethostname EXTERNAL "wsock32.dll" :
    DEFINE OUTPUT PARAMETER p-Hostname AS CHARACTER.
    DEFINE INPUT PARAMETER p-Length AS LONG.
    DEFINE RETURN PARAMETER p-Return AS LONG.
    END PROCEDURE.

    PROCEDURE gethostbyname EXTERNAL "wsock32.dll" :
    DEFINE INPUT PARAMETER p-Name AS CHARACTER.
    DEFINE RETURN PARAMETER p-Hostent AS LONG.
    END PROCEDURE.

    PROCEDURE inet_ntoa EXTERNAL "wsock32.dll" :
    DEFINE INPUT PARAMETER p-AddrStruct AS LONG.
    DEFINE RETURN PARAMETER p-AddrString AS MEMPTR.
    END PROCEDURE.

    PROCEDURE WSAStartup EXTERNAL "wsock32.dll" :
    DEFINE INPUT PARAMETER p-VersionReq AS SHORT.
    DEFINE INPUT PARAMETER ptr-WsaData AS LONG.
    DEFINE RETURN PARAMETER p-Return AS LONG.
    END PROCEDURE.

    PROCEDURE WSACleanup EXTERNAL "wsock32":
    DEFINE RETURN PARAMETER p-Return AS LONG.

    END PROCEDURE.
  3. af.dums

    af.dums Membro Ativo

    Show de bola..


    Muito obrigado...
  4. TrombiniSP

    TrombiniSP Membro Participativo

    Pessoal, mto bom post. Se for somente o nome da maquina tem jeito mais simples.
    Segue:

    Código:
    MESSAGE OS-GETENV('COMPUTERNAME')
                            VIEW-AS ALERT-BOX.

Compartilhe esta Página