首页 > 解决方案 > 每 4 秒获取连接的 wifi 连接的名称

问题描述

我使用以下函数来获取连接的 WiFi 连接的名称。该函数每 4 秒重复调用一次以监视连接更改。但过了一会儿,该功能不再像以前那样工作,并且无法返回false.

bool GetConnectedConnectionsName(wstring connection_names[50], int& number)
{
    HANDLE h_client = NULL;
    DWORD dwMaxClient = 2;
    DWORD dwCurVersion = 0;
    DWORD result = 0;
    DWORD dwRetVal = 0;
    int iRet = 0;

    WCHAR GuidString[39] = { 0 };

    unsigned int i, j, k;


    PWLAN_INTERFACE_INFO_LIST p_if_list = NULL;
    PWLAN_INTERFACE_INFO p_if_info = NULL;

    PWLAN_AVAILABLE_NETWORK_LIST p_bss_list = NULL;
    PWLAN_AVAILABLE_NETWORK p_bss_entry = NULL;

    int iRSSI = 0;

    result = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &h_client);
    if (result != ERROR_SUCCESS)
    {
        if (p_bss_list != NULL)
            WlanFreeMemory(p_bss_list);
        if (p_if_list != NULL)
            WlanFreeMemory(p_if_list);
        return false;
    }

    result = WlanEnumInterfaces(h_client, NULL, &p_if_list);
    if (result != ERROR_SUCCESS)
    {
        if (p_bss_list != NULL)
            WlanFreeMemory(p_bss_list);
        if (p_if_list != NULL)
            WlanFreeMemory(p_if_list);
        return false;
    }

    for (i = 0; i < (int)p_if_list->dwNumberOfItems; i++)
    {
        p_if_info = (WLAN_INTERFACE_INFO*)&p_if_list->InterfaceInfo[i];
        result = WlanGetAvailableNetworkList(h_client,
                                                &p_if_info->InterfaceGuid,
                                                0,
                                                NULL,
                                                &p_bss_list);
        if (result != ERROR_SUCCESS)
        {
            if (p_bss_list != NULL)
                WlanFreeMemory(p_bss_list);
            if (p_if_list != NULL)
                WlanFreeMemory(p_if_list);
            return false;
        }
        else
        {
            number = 0;
            for (j = 0; j < p_bss_list->dwNumberOfItems; j++)
            {
                p_bss_entry = (WLAN_AVAILABLE_NETWORK*)&p_bss_list->Network[j];
                if (p_bss_entry->dwFlags && (p_bss_entry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED))
                {
                    connection_names[number] = wstring(p_bss_entry->strProfileName);
                    number++;
                }
            }
        }
    }
    if (p_bss_list != NULL)
        WlanFreeMemory(p_bss_list);
    if (p_if_list != NULL)
        WlanFreeMemory(p_if_list);
    return true;
}

出了什么问题,我该如何解决这个问题?

标签: c++cwinapiwifiwlanapi

解决方案


推荐阅读