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