Bonjour à tous,
Et par avance merci de me lire...
Voici ce qui me préoccupe depuis plusieurs jours.
Je dispose d'une application qui fonctionne en remote desktop a partir d'une machine qui sert de seveur sous Windows 7 Pro. J'utilise un Client RDP pour connecter des iPad, Tel Windows, et autre joyeuseté Android. Hors pour pouvoir reconnaître le périphérique concerné, je suis obligé de sauvegarder l'adresse Mac de la machine qui à fait une opération. Pour ce faire, j'utilise des API de Windows(WTSAPI32.DLL) avec comme fonction : WTSQuerySessionInformationA Il apparaît que, et c'est bien indiqué sur le TechNet de Microsoft, selon le client de connexion utilisé l'adresse Ip peut être lisible ou pas.
Alors, sous IOs, ça fonctionne très bien mais même sous Windows Mobile, le problème est entier. Si j'utilise RD Client, ça ne fonctionne pas partout. Sour Parrallels client, si ! Pourquoi ne pas utiliser Parrallels client me direz vous ? Simplement parce que certaine fonctionnalités ne sont pas top.
Donc, me voilà avec un code qui ne fonctionne pas... Après beaucoup de recherche...
Bien sûr les fonctions NetAdresseIp, NetNomMachine et NetAdresseMac ne sont d'aucune utilité, car elle renvoi l'adresse de la session... Pas celle du client... Et je ne peux pas écrire ces infos dans un fichier quelconque type .ini, à relire..
Et c'est là que vous entrez en piste... Avez vous une solution à ce "problème"...
Je vous poste mon code, et si jamais vous avez une idée... je vous remercie mille fois par avance...
Windevement vôtre...
Roland.
Fonction GetMyMac()
WTS_SESSION_INFO est Structure SessionId est entier pWinStationName est entier state est entier FIN
STRUCT_WTS_CLIENT_ADDRESS est une Structure AddressFamily est un entier Address est un chaîne fixe sur 20 END
LOCAL liDLLHandle, hServer sont entier pCount , p, p1, pBytes, retval sont entier fsWinStationName est ASCIIZ chaîne sur 128 dynarrSessionInfo est tableau dynamique de 1 WTS_SESSION_INFO stStrucClient_Address est STRUCT_WTS_CLIENT_ADDRESS sClientname est une chaîne = ExtraitChaîne(SysEnvironnement("CLIENTNAME"),2,"=") // Nom du poste client qui tourne l'appli sMacAdd est une chaîne sIp est une chaîne
retval=API("WTSAPI32","WTSQuerySessionInformationA", hServer,dynarrSessionInfo[i]:SessionID,14,&p1,&pBytes)
SI retval ALORS
SI pBytes>0 ALORS Transfert(&stStrucClient_Address,p1,pBytes)
sIp = ""
POUR nTcp = 3 A 6 sIp += (sIp = "" ? "" SINON ".") + NumériqueVersChaîne(Asc(stStrucClient_Address:Address[[nTcp]])) // Lecture de l'Ip FIN
API("WTSAPI32","WTSFreeMemory",p1) // Libération
p1=0 FIN fin
SI sIp <> "" ALORS sMacAdd = NetIPVersMAC(sIp) // On a l'Ip.. donc .. la Mac...
renvoyer sMacAdd |