Ich habe einige Code, der erfolgreich über eine Liste von Wi-Fi-Netzwerken iteriert, und gibt Feedback zu verfügbaren Netzwerken. Die wesentlichen Anrufe hier gezeigt ...Erhalten von Wi-Fi-Verbindungsstatus von 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];
:
}
}
Das alles funktioniert gut, und innerhalb der inneren Schleife Ich bin in der Lage alle Attribute zuzugreifen, die ich brauche, wie Signalstärke, Sicherheit Flaggen, etc. über die Netzwerk-Datenstruktur.
Eine Sache, die ich nicht in der Lage bin zu erhalten, ist Informationen über den Verbindungsstatus, wie Authentifizieren oder AUTHENTICATION_FAILED, usw., also habe ich versucht, einen weiteren Anruf innerhalb der Schleife wie folgt vorstellen ...
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)
{
:
}
Beim Aufrufen der Funktion CmGetConnectionDetailsByName() sehen die Details in der CM_CONNECTION_DETAILS-Struktur korrekt aus (Name und Version), die Funktion kehrt jedoch mit CMRE_INVALID_CONNECTION zurück und die Struktur wird nicht aufgefüllt.
Ich konnte keine Beispiele finden, dass dieser Aufruf erfolgreich war (nur ein paar Referenzen auf den Aufruf, die den gleichen CMRE_INVALID_CONNECTION-Code zurückgeben).
Hat jemand Erfahrung damit, den Anruf erfolgreich zu verwenden, oder schlagen Sie alternativ einen besseren Weg vor, um den Verbindungsstatus eines Netzwerks herauszufinden (zB wenn AUTHENTICATION läuft oder AUTHENTICATION fehlgeschlagen ist, usw.)?
[Ich bin mit Visual Studio 2013 C++ (native Windows-Anwendung, nicht MFC), das Ziel ist 32-Bit und Unicode, auf Windows Compact 2013]