WiFi信息

官网范例:https://docs.microsoft.com/en-us/windows/win32/api/wlanapi/nf-wlanapi-wlangetavailablenetworklist

简单范例:

#ifndef UNICODE
#define UNICODE
#endif

#include <windows.h>
#include <iostream>
#include <wlanapi.h>
#include <objbase.h>
#include <wtypes.h>
#include <string>
#include<iomanip>

#pragma comment(lib, "wlanapi.lib")
#pragma comment(lib, "ole32.lib")

using namespace std;

int main()
{
    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;

    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);
        system("echo WlanOpenHandle failed with error >> Log");
        return 1;
    }

    dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);
    if (dwResult != ERROR_SUCCESS)
    {
        wprintf(L"WlanEnumInterfaces failed with error: %u\n", dwResult);
        system("echo WlanEnumInterfaces failed with error >> Log");
        return 1;
    }
    else
    {
        for (i = 0; i < (int)pIfList->dwNumberOfItems; i++)
        {
            pIfInfo = (WLAN_INTERFACE_INFO *)&pIfList->InterfaceInfo[i];
            iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR)&GuidString, sizeof(GuidString) / sizeof(*GuidString));
            dwResult = WlanGetAvailableNetworkList(hClient, &pIfInfo->InterfaceGuid, 0, NULL, &pBssList);

            if (iRet == 0) {
                wprintf(L"StringFromGUID2 failed\n");
                system("echo StringFromGUID2 failed with error >> Log");
            }
            else {
                wprintf(L"InterfaceGUID[%d]: %ws\n", i, GuidString);
            }
            wprintf(L"Interface Description[%d]: %ws", i,
                pIfInfo->strInterfaceDescription);
            wprintf(L"\n");

            if (dwResult != ERROR_SUCCESS)
            {
                wprintf(L"WlanGetAvailableNetworkList failed with error: %u\n",dwResult);
                system("echo WlanGetAvailableNetworkList failed with error >> Log");
                dwRetVal = 1;
            }
            else
            {
                for (j = 0; j < pBssList->dwNumberOfItems; j++)
                {
                    pBssEntry = (WLAN_AVAILABLE_NETWORK *)& pBssList->Network[j];
                    cout << j << "\t" << "WiFi:" << pBssEntry->dot11Ssid.ucSSID << setw(20- pBssEntry->dot11Ssid.uSSIDLength) << "\t" << "SignalQuality:" << pBssEntry->wlanSignalQuality << endl;        
                }
            }
        }

    }
    if (pBssList != NULL)
    {
        WlanFreeMemory(pBssList);
        pBssList = NULL;
    }

    if (pIfList != NULL)
    {
        WlanFreeMemory(pIfList);
        pIfList = NULL;
    }
    system("pause");

    return 0;
}

运行结果:

WiFi信息