General information
Category:
Coding, syntax & commands
Try with this...... WithOut COM/OCX
Regards.-
-------------------------------------------------------------------------------------
SET PROCEDURE TO GetIP.prg
oo = CREATEOBJECT("GetIP")
a = oo.GetLocalHostName()
b = oo.GetHostIP( a )
? "Local Host:", a
? "Local IP:", b
DEFINE CLASS GetIP AS CUSTOM
NAME = "GetIP"
PROCEDURE Init
DECLARE INTEGER WSAStartup IN ws2_32 INTEGER wVerRq, STRING @lpWSAData
DECLARE INTEGER WSACleanup IN ws2_32
DECLARE INTEGER gethostbyname IN ws2_32 STRING hostname
DECLARE INTEGER gethostname IN ws2_32;
STRING @name, INTEGER namelen
DECLARE RtlMoveMemory IN kernel32 As Heap2Str;
STRING @Dest, INTEGER Src, INTEGER nLength
ENDPROC
PROCEDURE GetLocalHostName
*|-- returns the standard host name for the local machine
#DEFINE SOCKET_ERROR -1
LOCAL lcBuffer, lnResult
lcBuffer = SPACE(250)
lnResult = gethostname (@lcBuffer, Len(lcBuffer))
RETURN Iif(lnResult=0, SUBSTR(lcBuffer, 1,AT(Chr(0),lcBuffer)-1), "")
ENDPROC
FUNCTION GetHostIP (lcHostname)
#DEFINE HOSTENT_SIZE 16
LOCAL lcHOSTENTptr, lcHOSTENT, lnAddrlistPtr
*|-- address for the HOSTENT structure
lcHOSTENTptr = gethostbyname(lcHostname)
IF lcHOSTENTptr <> 0
lcHOSTENT = This.GetMemBuf( lcHOSTENTptr, HOSTENT_SIZE )
*|-- a pointer to a null-terminated list of addresses
lnAddrlistPtr = This.buf2dword(SUBSTR(lcHOSTENT, 13,4))
RETURN This.GetIPfromHOSTENT(lnAddrlistPtr)
ENDIF
RETURN ""
ENDPROC
PROCEDURE GetIPfromHOSTENT (lnAddrlistPtr)
*|-- retrieving IP address from the HOSTENT structure
LOCAL lnDataAddress, lcResult
lnDataAddress = This.buf2dword( This.GetMemBuf( lnAddrlistPtr, 4 ) )
RETURN IIF( lnDataAddress <> 0, This.GetIPAddress( This.GetMemBuf( lnDataAddress, 4 ) ), "" )
ENDPROC
FUNCTION GetIPAddress (lcAddrBuf)
*|-- converts 4-characters string buffer
*|-- to the IP address string representation
LOCAL lcResult, ii
lcResult = ""
FOR ii=1 TO 4
lcResult = lcResult +;
LTRIM(STR(Asc(SUBSTR(lcAddrBuf, ii,1)))) +;
Iif(ii=4, "",".")
ENDFOR
RETURN lcResult
ENDPROC
PROCEDURE buf2dword (lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
Asc(SUBSTR(lcBuffer, 2,1)) * 256 +;
Asc(SUBSTR(lcBuffer, 3,1)) * 65536 +;
Asc(SUBSTR(lcBuffer, 4,1)) * 16777216
ENDPROC
PROCEDURE GetMemBuf (lnAddr, lnBufsize)
LOCAL lcBuffer
lcBuffer = REPLICATE(Chr(0), lnBufsize)
Heap2Str( @lcBuffer, lnAddr, lnBufsize )
RETURN lcBuffer
ENDPROC
ENDDEFINE
Previous
Next
Reply
View the map of this thread
View the map of this thread starting from this message only
View all messages of this thread
View all messages of this thread starting from this message only