Obtiene el Host y la IP de un equipo a través del API
#Define 
WSADATA_SIZE 398
#Define 
WS_VERSION 514
#Define 
HOSTBUFFER_SIZE 256
#Define 
HOSTENT_STRUCT_SIZE 16
Do DeclareAPIs
Local lcBuffer, lnResult, lcHostname, 
lcMessage, lcHostentStruct
lcBuffer  = SPACE(WSADATA_SIZE)
lnResult  = WSAStartup(WS_VERSION, @lcBuffer)
lcMessage = ""
If lnResult = 0
   
lcBuffer = Replicate(CHR(0),HOSTBUFFER_SIZE)
   
lnResult = gethostname(@lcBuffer,HOSTBUFFER_SIZE)
   
If 
lnResult = 0
       
lcHostname = STRTRAN(lcBuffer,CHR(0),"")
       
lcMessage = "HOST: "
+ lcHostname + 
Chr(13)
       
lnResult = gethostbyname(lcHostname)
       
If 
lnResult != 0
           
lcHostentStruct = MemoryBuffer(lnResult, HOSTENT_STRUCT_SIZE)
           
lnResult = buf2dword(Substr(lcHostentStruct, 
13,4))
           
If 
lnResult != 0
               
lcMessage = lcMessage + 
"LOCAL IP ADDRESS: " 
+ IPPortion(lnResult)
       
    Endif
       
Endif
   
Endif
   
If Empty(lcMessage)
       
lcMessage = "Lo se 
pudo obtener Host - IP"
   
EndIf
   
Messagebox(lcMessage,64,"Local 
Host & IP")
   
=WSACleanup()
Else
   
Messagebox("Error 
: " + 
Transform(lnResult))
ENDIF
**************************
PROCEDURE DeclareAPIs
**************************
   
Declare Integer
WSAStartup 
In 
wsock32;
     
Integer 
wVerRq, 
String 
@lpWSAData
   
Declare Integer
WSACleanup 
In 
wsock32
   
Declare Integer
gethostname 
In 
wsock32;
     
String 
@Name,
Integer 
namelen
   
Declare Integer
gethostbyname 
In 
wsock32;
     
String HostName
   
Declare RtlMoveMemory 
In 
kernel32 
As 
Heap2Str;
     
String 
@, 
Integer,
Integer
Endproc
**************************
Function IPPortion(nPointer)
**************************
   
Local 
lnAddress, lcResult
   
lnAddress = buf2dword(MemoryBuffer(nPointer, 4))
   
Return Iif(lnAddress 
<> 0, JustIP(MemoryBuffer(lnAddress, 4)), 
"")
Endfunc
**************************
Function JustIP(cBuffer)
**************************
   
Local 
lcResult, lnCounter
   
lcResult = ""
   
For 
lnCounter=1 
To 
4
       
lcResult = lcResult + 
Ltrim(Str(Asc(Substr(cBuffer, 
lnCounter)))) + Iif(lnCounter=4,    
"",".")
    Endfor
   
Return lcResult
Endfunc
**************************
Function buf2word (cBuffer)
**************************
    Return Asc(Substr(cBuffer, 
1,1)) + Asc(Substr(cBuffer, 
2,1)) * 256
Endfunc
**************************
Function buf2dword(cBuffer)
**************************
    Return Asc(Substr(cBuffer, 
1,1)) + ;
       
BitLShift(Asc(Substr(cBuffer, 
2,1)), 8) +;
       
BitLShift(Asc(Substr(cBuffer, 
3,1)), 16) +;
       
BitLShift(Asc(Substr(cBuffer, 
4,1)), 24)
Endfunc
**************************
Function MemoryBuffer(nAddress, 
nBuffersize)
**************************
    Local 
lcBuffer
   
lcBuffer = SPACE(nBuffersize)
   
= Heap2Str (@lcBuffer, nAddress, nBuffersize)
   
Return 
lcBuffer
Endfunc