Information générale
Catégorie:
Codage, syntaxe et commandes
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
Précédent
Suivant
Répondre
Voir le fil de ce thread
Voir le fil de ce thread à partir de ce message seulement
Voir tous les messages de ce thread
Voir tous les messages de ce thread à partir de ce message seulement