IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

récupérer infos des connexions wifi


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut récupérer infos des connexions wifi
    Bonjour a tous, je cherche une façon de retrouver les informations des connexions wifi disponible.(SSID, force du signal, etc ..) depuis un programme codé avec Borland C++.

    J'ai trouvé un API qui semble pouvoir effectuer cela, le Native Wifi API(Wlanapi.lib).
    Mais il semblerait que ce ne soit pas compilable sous borland.
    lorsque j'essaye de compiler apres l'inclusion du wlanapi.h j'ai tout un tas d'erreur.
    Par exemple borland ne sais pas interpréter la ligne suivante dans le fichier l2cmn.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    __field_bcount(dwDataSize) PVOID pData;
    Si quelqu'un peut me dire comment compiler avec cette grmlgrml d'API, ou même m'indiquer une autre lib qui me permetrait de récupérer ces infos ce serait avec plaisir

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Par défaut
    Bonjour,

    Ton problème est sans doute lié à l'utilisation de DLLs sous borland.
    Les librairies .lib fournies avec les DLLs sont en général utilisables avec les compilateurs microsoft uniquement.

    Pour utiliser une DLL avec C++ Builder, il faut recréer le .lib avec le .dll et l'outil implib.

    Pour les détails, je te propose de consulter le lien suivant:
    http://lfe.developpez.com/DLL/

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Quels sont tes projets avec ca? jaimerais avoir plus dinfos aussi merci

  4. #4
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    Après un peu de recherche j'ai fini par trouver comment faire pour utiliser cette API.
    J'utilise directement la dll par appel dinamyque des fonctions, et en retapant les différentes strucutres et enum défini dans l'en-tete.

    Le but de ce projet était de pouvoir contrôler les connexions wifi par programme.
    C'est a dire plus ou moins reprendre ce que l'on peut faire avec l'outil déjà présent sous windows.
    Recherche des réseaux a portée, connexion a un réseau donné, création de profils, ect..

    Si ça t'intéresse je t'invite à aller voir la MSDN à ce sujet :
    http://msdn.microsoft.com/en-us/libr...56(VS.85).aspx

    C'est assé succin et les c'est pas les exemples qui étouffent cette doc mais ça permet de se dépatouiller

    pour info cette API fonctionne sous vista ou XP sp3.
    pour pouvoir l'utiliser sous XP sp2, il faut installer l'api que l'on peut télécharger à cette adresse :
    http://www.microsoft.com/downloads/d...displaylang=en

    Toutes les fonctionalités ne sont pas implémentées pour windows XP, mais toutes les fonctionalités pouvant être utilisées sous XP sont énumérées sur la MSDN

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Si tu pouvais m'expliquer ce que tu veux en privé et ce que tu es arrivé a faire
    je galere trop avec ce truc en anglais

  6. #6
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Tu peut aussi l'expliquer en public pour en faire profiter tout le monde

  7. #7
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    Et bien je suis parvenu a faire a peut pres tout ce qui est possible de faire avec l'outil Windows.

    Lister les réseaux a portée
    Se connecter à un réseau avec les paramètres qui vont bien(ssid, wep s'il y a lieu d'en avoir une, type d'encryption, etc..)
    bien sur se déconnecter du réseau...

    vais essayer d'expliquer un peu le début de ce que j'ai fiat, c'est à dire lister les réseaux a portée.

    on commence par créer un handle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    HANDLE clientHandle;
    DWORD version, error;
    WlanOpenHandle(1,NULL,&version,&clientHandle);
    le premier paramètre dépend du système, 1 pour XP et 2 pour vista.

    ensuite il faut lister les interfaces réseau disponibles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    PWLAN_INTERFACE_INFO_LIST intInfo;
    WlanEnumInterfaces(clientHandle,NULL,&intInfo);
    On récupere une structure de type PWLAN_INTERFACE_INFO_LIST, qui contiens comme son nom l'indique les infos sur toutes tes interfaces.

    A partir de la on récupere le Guid de l'interface qui nous intéresse.
    Dans mon cas c'était facile je n'avais qu'une seule interface ce qui a donné quelquechose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GUID *Guid;
    Guid =&intInfo->InterfaceInfo[0].InterfaceGuid;
    Il ne reste plus qu'a récupérer la liste des réseaux, et dans mon cas à l'afficher dans un ListBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WlanGetAvailableNetworkList(clientHandle,Guid,0,NULL, &netList);
     
      for (unsigned int i=0;i<netList->dwNumberOfItems;i++)
      {
        ListBox1->Items->Add(netList->Network[i].strProfileName);
      }
    Je rentre pas trop trop dans le détail, pas trop le temps la mais si vous avez des questiosn hésitez pas.


    Pour la suite si on veut se conencter a un réseau il y a 2 possibilités.

    Soit utiliser un profile déja existant. Les profiles ne son ni plus ni moins que les connexions déjà configurées qu'on peut voir dans la liste de "mes réseaux préférés" (ou quelque chose du genre)

    Soit créer un nouveau profile. Pour ça il faut utiliser la fonction WlanSetProfile, qui demande en paramètre une chaine de caractère formatée comme un fichier XML.Il y a plusieurs exemples sur la MSDN.
    http://msdn.microsoft.com/en-us/libr...53(VS.85).aspx

    on peut retrouver la liste des paramètres possibles pour le profile ici:
    http://msdn.microsoft.com/en-us/libr...65(VS.85).aspx

    Par contre tous les paramètres ne sont pas pris en compte sous xp, ça ne devrait pas générer d'erreur mais ils seront tout simplement ignorés.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Je n'ai pas vu le download de la lib sur le msdn ...
    tu peux la mettre ici ?

  9. #9
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    En fait jen'ai pas utilisé le .lib de l'API qui semble ne pas pouvoir compiler sous borland.

    J'ai simplement chargé les fonctions de la dll a coups de GetProcAddress.
    Puis j'ai redéfini les structures et enums necessaires dans mon en-tête.
    C'est à dire de simple copier-coller depuis la msdn des dites structures.

    par exemple la fonction WlanEnuInterfaces demande une structure de type WLAN_INTERFACE_INFO_LIST qui elle meme demande une structure de type WLAN_INTERFACE_INFO.

    Donc au final dans mon fichier en-tete on retrouve :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    typedef struct _WLAN_INTERFACE_INFO {
      GUID InterfaceGuid;
      WCHAR strInterfaceDescription[256];
      WLAN_INTERFACE_STATE isState;
    } WLAN_INTERFACE_INFO,
     *PWLAN_INTERFACE_INFO;
    //------------------------------------------------
     
    typedef struct _WLAN_INTERFACE_INFO_LIST {
      DWORD dwNumberOfItems;
      DWORD dwIndex;
      WLAN_INTERFACE_INFO InterfaceInfo[1];
    } WLAN_INTERFACE_INFO_LIST,
      *PWLAN_INTERFACE_INFO_LIST;

    C'est un peu lourd a la longue, mais ça fonctionne

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Par défaut
    Le .lib tu l'as ? Il faut le .h aussi ...
    "Il ne se compile pas" faut l'ajouter a ton projet :p

  11. #11
    Membre éclairé Avatar de jehrikhan
    Inscrit en
    Mars 2008
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 90
    Par défaut
    Il semblerait, aussi étrange que ce soit,que cette lib ne compile qu'avec visual et encore pas toutes les versions.
    En tous cas impossible de le compiler avec borland 6.
    Et oui j'ai bien inclu le lib et le .h a mon projet :p
    Le lib généré dailleurs par je ne sais plus quel executable qui permet de faire des .lib compatibles.

    Le soucis n'est pas le lib en soit mais certains .h inclus dans wlanapi.h.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. récupérer des infos des Blast
    Par abysse dans le forum Bioinformatique
    Réponses: 2
    Dernier message: 28/05/2008, 17h50
  2. Récupérer les infos des champs d'une table Firebird
    Par neodelphi2007 dans le forum SQL
    Réponses: 3
    Dernier message: 22/04/2008, 12h48
  3. Récupérer les infos des mails reçus
    Par Arioch dans le forum Modules
    Réponses: 2
    Dernier message: 02/05/2007, 14h36
  4. Réponses: 2
    Dernier message: 21/03/2007, 16h26
  5. Comment récupérer le nom des connexions réseau
    Par ghyslain84 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/12/2005, 19h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo