From b8ba84deb1288adfc8e59a5a2c471dfdefd80b73 Mon Sep 17 00:00:00 2001 From: JacobMuncy Date: Sun, 17 Jan 2016 23:25:35 -0500 Subject: [PATCH] Add Windows Wlan Class. (OOP). Windows wlan class simplifies the Windows API used to get the WIFI information or control the WIFI information in Windows. Using this you can get the WIFI signal power measured in dBm. A person can also get more in depth WIFI information. That being said. Using this class, this information is easy to access by using the object's methods. Some of my classes I make, you can also pass parameter arguments through the class. A good example is the Windows Message class. When you pass a message argument parameter, this is what will show up on your Windows Message Box. --- LanguageEasy.cpp | 493 +++++++++++++++++++++++++++++++++++++++++++++++ LanguageEasy.h | 21 ++ 2 files changed, 514 insertions(+) diff --git a/LanguageEasy.cpp b/LanguageEasy.cpp index e034c70..1ccffb9 100644 --- a/LanguageEasy.cpp +++ b/LanguageEasy.cpp @@ -121,3 +121,496 @@ bool WindowsBattery::Output_Is_Computer_Plugged_In_As_Boolean() } return IsPCPluggedIn; } + +// WindowsWlan + +WindowsWlan::WindowsWlan(bool IsWifiPresent) +{ +} + + +int WindowsWlan::Console_Out_In_Depth_Wifi_Information() +{ + + +#ifndef UNICODE +#define UNICODE +#endif + + // Need to link with Wlanapi.lib and Ole32.lib +#pragma comment(lib, "wlanapi.lib") +#pragma comment(lib, "ole32.lib") + + + // Declare and initialize variables. + + HANDLE hClient = NULL; + DWORD dwMaxClient = 2; // + DWORD dwCurVersion = 0; + DWORD dwResult = 0; + DWORD dwRetVal = 0; + int iRet = 0; + + WCHAR GuidString[39] = { 0 }; + + unsigned int i, j, k; + + /* variables used for WlanEnumInterfaces */ + + PWLAN_INTERFACE_INFO_LIST pIfList = NULL; + PWLAN_INTERFACE_INFO pIfInfo = NULL; + + PWLAN_AVAILABLE_NETWORK_LIST pBssList = NULL; + PWLAN_AVAILABLE_NETWORK pBssEntry = NULL; + + int iRSSI = 0; + + dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient); + if (dwResult != ERROR_SUCCESS) { + wprintf(L"WlanOpenHandle failed with error: %u\n", dwResult); + return 1; + // You can use FormatMessage here to find out why the function failed + } + + dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList); + if (dwResult != ERROR_SUCCESS) { + wprintf(L"WlanEnumInterfaces failed with error: %u\n", dwResult); + return 1; + // You can use FormatMessage here to find out why the function failed + } + else { + wprintf(L"Num Entries: %lu\n", pIfList->dwNumberOfItems); + wprintf(L"Current Index: %lu\n", pIfList->dwIndex); + for (i = 0; i < (int)pIfList->dwNumberOfItems; i++) { + pIfInfo = (WLAN_INTERFACE_INFO *)&pIfList->InterfaceInfo[i]; + wprintf(L" Interface Index[%u]:\t %lu\n", i, i); + iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR)&GuidString, + sizeof(GuidString) / sizeof(*GuidString)); + // For c rather than C++ source code, the above line needs to be + // iRet = StringFromGUID2(&pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString, + // sizeof(GuidString)/sizeof(*GuidString)); + if (iRet == 0) + wprintf(L"StringFromGUID2 failed\n"); + else { + wprintf(L" InterfaceGUID[%d]: %ws\n", i, GuidString); + } + wprintf(L" Interface Description[%d]: %ws", i, + pIfInfo->strInterfaceDescription); + wprintf(L"\n"); + wprintf(L" Interface State[%d]:\t ", i); + switch (pIfInfo->isState) { + case wlan_interface_state_not_ready: + wprintf(L"Not ready\n"); + break; + case wlan_interface_state_connected: + wprintf(L"Connected\n"); + break; + case wlan_interface_state_ad_hoc_network_formed: + wprintf(L"First node in a ad hoc network\n"); + break; + case wlan_interface_state_disconnecting: + wprintf(L"Disconnecting\n"); + break; + case wlan_interface_state_disconnected: + wprintf(L"Not connected\n"); + break; + case wlan_interface_state_associating: + wprintf(L"Attempting to associate with a network\n"); + break; + case wlan_interface_state_discovering: + wprintf(L"Auto configuration is discovering settings for the network\n"); + break; + case wlan_interface_state_authenticating: + wprintf(L"In process of authenticating\n"); + break; + default: + wprintf(L"Unknown state %ld\n", pIfInfo->isState); + break; + } + wprintf(L"\n"); + + dwResult = WlanGetAvailableNetworkList(hClient, + &pIfInfo->InterfaceGuid, + 0, + NULL, + &pBssList); + + if (dwResult != ERROR_SUCCESS) { + wprintf(L"WlanGetAvailableNetworkList failed with error: %u\n", + dwResult); + dwRetVal = 1; + // You can use FormatMessage to find out why the function failed + } + else { + wprintf(L"WLAN_AVAILABLE_NETWORK_LIST for this interface\n"); + + wprintf(L" Num Entries: %lu\n\n", pBssList->dwNumberOfItems); + + for (j = 0; j < pBssList->dwNumberOfItems; j++) { + pBssEntry = + (WLAN_AVAILABLE_NETWORK *)& pBssList->Network[j]; + + wprintf(L" Profile Name[%u]: %ws\n", j, pBssEntry->strProfileName); + + wprintf(L" SSID[%u]:\t\t ", j); + if (pBssEntry->dot11Ssid.uSSIDLength == 0) + wprintf(L"\n"); + else { + for (k = 0; k < pBssEntry->dot11Ssid.uSSIDLength; k++) { + wprintf(L"%c", (int)pBssEntry->dot11Ssid.ucSSID[k]); + } + wprintf(L"\n"); + } + + wprintf(L" BSS Network type[%u]:\t ", j); + switch (pBssEntry->dot11BssType) { + case dot11_BSS_type_infrastructure: + wprintf(L"Infrastructure (%u)\n", pBssEntry->dot11BssType); + break; + case dot11_BSS_type_independent: + wprintf(L"Infrastructure (%u)\n", pBssEntry->dot11BssType); + break; + default: + wprintf(L"Other (%lu)\n", pBssEntry->dot11BssType); + break; + } + + wprintf(L" Number of BSSIDs[%u]:\t %u\n", j, pBssEntry->uNumberOfBssids); + + wprintf(L" Connectable[%u]:\t ", j); + if (pBssEntry->bNetworkConnectable) + wprintf(L"Yes\n"); + else { + wprintf(L"No\n"); + wprintf(L" Not connectable WLAN_REASON_CODE value[%u]:\t %u\n", j, + pBssEntry->wlanNotConnectableReason); + } + + wprintf(L" Number of PHY types supported[%u]:\t %u\n", j, pBssEntry->uNumberOfPhyTypes); + + if (pBssEntry->wlanSignalQuality == 0) + iRSSI = -100; + else if (pBssEntry->wlanSignalQuality == 100) + iRSSI = -50; + else + iRSSI = -100 + (pBssEntry->wlanSignalQuality / 2); + + wprintf(L" Signal Quality[%u]:\t %u (RSSI: %i dBm)\n", j, + pBssEntry->wlanSignalQuality, iRSSI); + + wprintf(L" Security Enabled[%u]:\t ", j); + if (pBssEntry->bSecurityEnabled) + wprintf(L"Yes\n"); + else + wprintf(L"No\n"); + + wprintf(L" Default AuthAlgorithm[%u]: ", j); + switch (pBssEntry->dot11DefaultAuthAlgorithm) { + case DOT11_AUTH_ALGO_80211_OPEN: + wprintf(L"802.11 Open (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + case DOT11_AUTH_ALGO_80211_SHARED_KEY: + wprintf(L"802.11 Shared (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + case DOT11_AUTH_ALGO_WPA: + wprintf(L"WPA (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + case DOT11_AUTH_ALGO_WPA_PSK: + wprintf(L"WPA-PSK (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + case DOT11_AUTH_ALGO_WPA_NONE: + wprintf(L"WPA-None (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + case DOT11_AUTH_ALGO_RSNA: + wprintf(L"RSNA (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + case DOT11_AUTH_ALGO_RSNA_PSK: + wprintf(L"RSNA with PSK(%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + default: + wprintf(L"Other (%lu)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + } + + wprintf(L" Default CipherAlgorithm[%u]: ", j); + switch (pBssEntry->dot11DefaultCipherAlgorithm) { + case DOT11_CIPHER_ALGO_NONE: + wprintf(L"None (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + case DOT11_CIPHER_ALGO_WEP40: + wprintf(L"WEP-40 (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + case DOT11_CIPHER_ALGO_TKIP: + wprintf(L"TKIP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + case DOT11_CIPHER_ALGO_CCMP: + wprintf(L"CCMP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + case DOT11_CIPHER_ALGO_WEP104: + wprintf(L"WEP-104 (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + case DOT11_CIPHER_ALGO_WEP: + wprintf(L"WEP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + default: + wprintf(L"Other (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + } + + wprintf(L" Flags[%u]:\t 0x%x", j, pBssEntry->dwFlags); + if (pBssEntry->dwFlags) { + if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED) + wprintf(L" - Currently connected"); + if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED) + wprintf(L" - Has profile"); + } + wprintf(L"\n"); + + wprintf(L"\n"); + } + } + } + + } + if (pBssList != NULL) { + WlanFreeMemory(pBssList); + pBssList = NULL; + } + + if (pIfList != NULL) { + WlanFreeMemory(pIfList); + pIfList = NULL; + } + cin.get(); + return dwRetVal; + } + + + + + +int WindowsWlan::Get_Wifi_Signal_As_Integer() +{ +#ifndef UNICODE +#define UNICODE +#endif + + // Need to link with Wlanapi.lib and Ole32.lib +#pragma comment(lib, "wlanapi.lib") +#pragma comment(lib, "ole32.lib") + + for (int i = 0; i < 99999990; i++) + { + + } + + // Declare and initialize variables. + + HANDLE hClient = NULL; + DWORD dwMaxClient = 2; // + DWORD dwCurVersion = 0; + DWORD dwResult = 0; + DWORD dwRetVal = 0; + int iRet = 0; + + WCHAR GuidString[39] = { 0 }; + + unsigned int i, j, k; + + /* variables used for WlanEnumInterfaces */ + + PWLAN_INTERFACE_INFO_LIST pIfList = NULL; + PWLAN_INTERFACE_INFO pIfInfo = NULL; + + PWLAN_AVAILABLE_NETWORK_LIST pBssList = NULL; + PWLAN_AVAILABLE_NETWORK pBssEntry = NULL; + + int GetiRSSI = 0; + int iRSSI = 0; + + + + dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient); + if (dwResult != ERROR_SUCCESS) { + //wprintf(L"WlanOpenHandle failed with error: %u\n", dwResult); + // You can use FormatMessage here to find out why the function failed + } + + dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList); + if (dwResult != ERROR_SUCCESS) { + //wprintf(L"WlanEnumInterfaces failed with error: %u\n", dwResult); + // You can use FormatMessage here to find out why the function failed + } + else { + + for (i = 0; i < (int)pIfList->dwNumberOfItems; i++) { + pIfInfo = (WLAN_INTERFACE_INFO *)&pIfList->InterfaceInfo[i]; + //wprintf(L" Interface Index[%u]:\t %lu\n", i, i); + iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR)&GuidString, + sizeof(GuidString) / sizeof(*GuidString)); + // For c rather than C++ source code, the above line needs to be + // iRet = StringFromGUID2(&pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString, + // sizeof(GuidString)/sizeof(*GuidString)); + //wprintf(L" Interface Description[%d]: %ws", i, + //pIfInfo->strInterfaceDescription); + //wprintf(L"\n"); + //wprintf(L" Interface State[%d]:\t ", i); + wprintf(L""); + + dwResult = WlanGetAvailableNetworkList(hClient, + &pIfInfo->InterfaceGuid, + 0, + NULL, + &pBssList); + + if (dwResult != ERROR_SUCCESS) { + //wprintf(L"WlanGetAvailableNetworkList failed with error: %u\n", + //dwResult); + dwRetVal = 1; + // You can use FormatMessage to find out why the function failed + } + else { + //wprintf(L"WLAN_AVAILABLE_NETWORK_LIST for this interface\n"); + + + for (j = 0; j < pBssList->dwNumberOfItems; j++) { + pBssEntry = + (WLAN_AVAILABLE_NETWORK *)& pBssList->Network[j]; + + //wprintf(L" Profile Name[%u]: %ws\n", j, pBssEntry->strProfileName); + + //wprintf(L" SSID[%u]:\t\t ", j); + if (pBssEntry->dot11Ssid.uSSIDLength == 0) + wprintf(L"\n"); + else { + for (k = 0; k < pBssEntry->dot11Ssid.uSSIDLength; k++) { + //wprintf(L"%c", (int)pBssEntry->dot11Ssid.ucSSID[k]); + } + //wprintf(L"\n"); + } + + //wprintf(L" BSS Network type[%u]:\t ", j); + switch (pBssEntry->dot11BssType) { + case dot11_BSS_type_infrastructure: + //wprintf(L"Infrastructure (%u)\n", pBssEntry->dot11BssType); + break; + case dot11_BSS_type_independent: + //wprintf(L"Infrastructure (%u)\n", pBssEntry->dot11BssType); + break; + default: + //wprintf(L"Other (%lu)\n", pBssEntry->dot11BssType); + break; + } + + //wprintf(L" Number of BSSIDs[%u]:\t %u\n", j, pBssEntry->uNumberOfBssids); + + //wprintf(L" Connectable[%u]:\t ", j); + + //wprintf(L" Number of PHY types supported[%u]:\t %u\n", j, pBssEntry->uNumberOfPhyTypes); + + if (pBssEntry->wlanSignalQuality == 0) + iRSSI = -100; + else if (pBssEntry->wlanSignalQuality == 100) + iRSSI = -50; + else + iRSSI = -100 + (pBssEntry->wlanSignalQuality / 2); + //wprintf(L" Signal Quality[%u]:\t %u (RSSI: %i dBm)\n", j, + //pBssEntry->wlanSignalQuality, iRSSI); + + int GetiRSSI = 0; + if (j == 0) + { + GetiRSSI = iRSSI; + return GetiRSSI; + } + + + wprintf(L" Security Enabled[%u]:\t ", j); + if (pBssEntry->bSecurityEnabled) + wprintf(L"Yes\n"); + else + wprintf(L"No\n"); + + wprintf(L" Default AuthAlgorithm[%u]: ", j); + switch (pBssEntry->dot11DefaultAuthAlgorithm) { + case DOT11_AUTH_ALGO_80211_OPEN: + wprintf(L"802.11 Open (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + case DOT11_AUTH_ALGO_80211_SHARED_KEY: + wprintf(L"802.11 Shared (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + case DOT11_AUTH_ALGO_WPA: + wprintf(L"WPA (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + case DOT11_AUTH_ALGO_WPA_PSK: + wprintf(L"WPA-PSK (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + case DOT11_AUTH_ALGO_WPA_NONE: + wprintf(L"WPA-None (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + case DOT11_AUTH_ALGO_RSNA: + wprintf(L"RSNA (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + case DOT11_AUTH_ALGO_RSNA_PSK: + wprintf(L"RSNA with PSK(%u)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + default: + wprintf(L"Other (%lu)\n", pBssEntry->dot11DefaultAuthAlgorithm); + break; + } + + wprintf(L" Default CipherAlgorithm[%u]: ", j); + switch (pBssEntry->dot11DefaultCipherAlgorithm) { + case DOT11_CIPHER_ALGO_NONE: + wprintf(L"None (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + case DOT11_CIPHER_ALGO_WEP40: + wprintf(L"WEP-40 (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + case DOT11_CIPHER_ALGO_TKIP: + wprintf(L"TKIP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + case DOT11_CIPHER_ALGO_CCMP: + wprintf(L"CCMP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + case DOT11_CIPHER_ALGO_WEP104: + wprintf(L"WEP-104 (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + case DOT11_CIPHER_ALGO_WEP: + wprintf(L"WEP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + default: + wprintf(L"Other (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm); + break; + } + + wprintf(L" Flags[%u]:\t 0x%x", j, pBssEntry->dwFlags); + if (pBssEntry->dwFlags) { + if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED) + wprintf(L" - Currently connected"); + if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED) + wprintf(L" - Has profile"); + } + wprintf(L"\n"); + + wprintf(L"\n"); + } + } + } + if (pBssList != NULL) { + WlanFreeMemory(pBssList); + pBssList = NULL; + } + + if (pIfList != NULL) { + WlanFreeMemory(pIfList); + pIfList = NULL; + } + + return GetiRSSI; + } + + + + +} diff --git a/LanguageEasy.h b/LanguageEasy.h index d3b27d7..fb95e43 100644 --- a/LanguageEasy.h +++ b/LanguageEasy.h @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -66,3 +67,23 @@ class WindowsBattery private: }; + + + + + +class WindowsWlan +{ + +public: + + //Default Constructor + WindowsWlan(bool); + + // Accessors + int Get_Wifi_Signal_As_Integer(); + int Console_Out_In_Depth_Wifi_Information(); + +private: + +};