C++ 获取有用的WiFi列表

2 篇文章 0 订阅

由于项目需要,在网上搜索了半天的中文资料,没有找到合适的资料。

今天在这里分享怎样做。代码都是微软官方网站:微软官网的链接。我只是做一个转发。

我用的VS2013,需要在属性->链接器->输入:加上wlanapi.lib,ole32.lib。

包含的头文件:

#include <windows.h>
#include <wlanapi.h>
#include <objbase.h>
#include <wtypes.h>
#include <stdio.h>
#include <stdlib.h>

下面上代码,我不需要的信息我都注释掉了。

// 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
		return;
	}

	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
		return;
	}
	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_HAS_PROFILE)
					//	{
					//		wprintf(L" - Has profile");
					//	}
					//}
					//wprintf(L"\n");
					//wprintf(L"\n");
				}
			}
		}

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

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

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值