J'ai du code qui parcourt avec succès une liste de réseaux Wi-Fi et fournit des informations sur les réseaux disponibles. Les appels essentiels présentés ici ...Obtention de l'état de la connexion Wi-Fi à partir de Connection Manager
WlanOpenHandle(WLAN_API_VERSION, NULL, &dwVersion, &hSession);
PWLAN_INTERFACE_INFO_LIST pInterfaceInfoList = NULL;
WlanEnumInterfaces(hSession, NULL, &pInterfaceInfoList);
for(int i ...)
{
PWLAN_AVAILABLE_NETWORK_LIST pAvailableNetworkList = NULL;
WlanGetAvailableNetworkList(hSession, &interfaceGUID,
WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES |
WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_PROFILES,
NULL, &pAvailableNetworkList);
for(int j ...)
{
WLAN_AVAILABLE_NETWORK network = pAvailableNetworkList->Network[j];
:
}
}
Tout cela fonctionne très bien, et à l'intérieur de la boucle intérieure que je suis en mesure d'accéder à tous les attributs que j'ai besoin, tels que la puissance du signal, drapeaux de sécurité, etc via structure de données de réseau.
Une chose que je ne suis pas en mesure d'obtenir des informations sur l'état est de connexion, telles que l'authentification ou AUTHENTICATION_FAILED, etc, j'ai donc essayé d'introduire un autre appel à l'intérieur de la boucle comme suit ...
CM_CONNECTION_DETAILS connectionDetails;
memset(&connectionDetails, 0, sizeof(CM_CONNECTION_DETAILS));
connectionDetails.Version = CM_CURRENT_VERSION;
const char* ccp = reinterpret_cast<const char*>(network.dot11Ssid.ucSSID);
mbstowcs(connectionDetails.szName, &ccp[0], network.dot11Ssid.uSSIDLength);
DWORD dwCount = sizeof(CM_CONNECTION_DETAILS);
CM_RESULT cmr = CmGetConnectionDetailsByName(connectionDetails.szName,
&connectionDetails, &dwCount);
if (cmr == CMRE_SUCCESS)
{
:
}
Lors de l'appel de la fonction CmGetConnectionDetailsByName(), les détails dans la structure CM_CONNECTION_DETAILS semblent corrects (nom et version), mais la fonction retourne avec CMRE_INVALID_CONNECTION et la structure n'est pas remplie.
Je n'ai pas pu trouver d'exemples de réussite de cet appel (seulement quelques références à l'appel retournant le même code CMRE_INVALID_CONNECTION). Quelqu'un a-t-il l'expérience de l'utilisation réussie de l'appel ou suggère-t-il un meilleur moyen de connaître l'état de connexion d'un réseau (si AUTHENTIFICATION est en cours ou si l'AUTHENTIFICATION a échoué, etc.)?
[Je suis en utilisant Visual Studio 2013 C++ (application native de Windows, pas MFC), la cible est de 32 bits et Unicode, fonctionnant sous Windows Compact 2013]