ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Obtenir l'adresse IP et l'adresse MAC d'un ordinateur   



L'auteur

Mike Gagnon
Canada Canada
Membre Simple
# 0000000025
enregistré le 14/10/2004

Gagnon Mike
Pointe Cla H9R 3K8
de la société Carver Technologies Inc.
Fiche personnelle


Note des membres
14,3/20
3 votes


Contributions > 09 - Automation > WMI (Windows Management Instrumentation)

Obtenir l'adresse IP et l'adresse MAC d'un ordinateur
# 0000000763
ajouté le 21/06/2010 12:39:43 et modifié le 21/06/2010
consulté 10232 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0
VFP 5.0

Description
Differente technique pour obtenir l'adresse IP et adresse MAC d'un ordinateur.
Code source :
lcComputer = "."
loWMIService = GetObject("winmgmts:\\" + lcComputer + "\root\cimv2")
IPConfigSet = loWMIService.ExecQuery ;
("Select IPAddress from Win32_NetworkAdapterConfiguration")
For Each IPConfig in IPConfigSet
If !IsNull(IPConfig.IPAddress)
  ?"Adresse IP:"+IPConfig.IPAddress(0)
  ? "Adresse MAC:"+IpToMacAddress(IPConfig.IPAddress(0))
endif
next


FUNCTION IpToMacAddress(lcIP)
        DECLARE INTEGER inet_addr IN ws2_32.dll STRING cIP
        DECLARE INTEGER SendARP IN iphlpapi.dll;
                INTEGER destIP, INTEGER sourceIP,;
                STRING @ pMacAddr, INTEGER @ PhyAddrLen
        LOCAL lnHr, lnIpAddr, lcMacAddr, lnLen
        lnIpAddr = inet_addr(lcIp)
        lcMacAddr = REPLICATE(CHR(0),6)
        lnLen = 6
        lnHr = SendARP(lnIpAddr,0,@lcMacAddr,@lnLen)
        RETURN BinaryToMac(lcMacAddr,lnLen)
ENDFUNC

FUNCTION BinaryToMac(lcMacAddr, lnLen)
        LOCAL lcMac, xj
        lcMac = ""
        FOR xj = 1 TO lnLen - 1
                lcMac = lcMac + RIGHT(TRANSFORM(ASC(;
                        SUBSTR(lcMacAddr,xj,1)),"@0"),2) + ":"
        ENDFOR
        lcMac = lcMac + RIGHT(TRANSFORM(ASC(;
                SUBSTR(lcMacAddr,lnLen,1)),"@0"),2)
        RETURN lcMac
ENDFUNC
Commentaires
le 06/08/2012, samuel a écrit :
Cela ne fonctionne pas en VFP6.
Pour info, ci-dessous le message d'erreur :
"Code d'erreur OLE 0x800401ea: Le nom ne peut pas ouvrir le fichier."

le 06/08/2012, Mike Gagnon a écrit :
http://www.news2news.com/vfp/index.php?example=347

Peut-etre ceci?

le 07/08/2012, samuel a écrit :
Merci pour le lien mais pour voir le bout de code en question, il faut s'inscrire sur le site. Je suis embêté car l'inscription est relativement chère (60€ pour 3 mois).
le 07/08/2012, Mike Gagnon a écrit :
celle-ci


? GetMac()
procedure getmac
LPARAMETERS zcIPAddrOrName
IF TYPE("zcIPAddrOrName") != "C"
zcIPAddrOrName = SUBSTR(SYS(0), 1, AT("#", SYS(0)) - 1)
ENDIF

** Declare some API functions.
DECLARE INTEGER ShellExecute ;
IN SHELL32.DLL ;
INTEGER nWinHandle,;
STRING cOperation,;
STRING cFileName,;
STRING cParameters,;
STRING cDirectory,;
INTEGER nShowWindow
DECLARE INTEGER DeleteFile IN win32api STRING
=DeleteFile("c:\getmac.txt")
=DeleteFile("c:\getmac.bat")

** Create the batch file and run it.
=STRTOFILE("nbtstat -a " + zcIPAddrOrName + " >c:\getmac.txt", "c:\getmac.bat", .F.)
=ShellExecute(0, "open", "c:\getmac.bat", "", "", 0)

** Wait until the file is created
lnSeconds = SECONDS()
lnHandle = FOPEN("c:\getmac.txt")
DO WHILE lnHandle <= 0 AND SECONDS() - lnSeconds <= 5
** Wait until file created...
=INKEY(.1, "H")
lnHandle = FOPEN("c:\getmac.txt")
ENDDO
IF lnHandle > 0
=FCLOSE(lnHandle)
ENDIF

** Parse through the file.
lcReturn = ""
IF FILE("c:\getmac.txt")
lcTempFile = UPPER(FILETOSTR("c:\getmac.txt"))
lnStart = AT("MAC ADDRESS = ", lcTempFile)
IF lnStart > 0
lnStart = lnStart + 14
lcReturn = SUBSTR(lcTempFile, lnStart, 17)
ENDIF
ENDIF

** Clean up.
=DeleteFile("c:\getmac.txt")
=DeleteFile("c:\getmac.bat")
RETURN lcReturn









le 21/09/2012, samuel a écrit :
Merci Mike ce code fonctionne en règle générale mais malheureusement de temps en temps, ça ne renvoit pas l'adresse Mac. Sur mon poste une fois sur 4, ça me renvoit une adresse MAC vide.
Je ne comprends pas...

le 21/09/2012, Mike Gagnon a écrit :
Dans cet article, il y a plusieurs exemples. As-tu essaye les autres pour voir si tu obtiens des resultats plus consistents?

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3