1. 连接的Wifi信息
WSAData data;
if (WSAStartup(MAKEWORD(1, 1), &data) != 0)
{
return;
}
DWORD dwError = ERROR_SUCCESS;
DWORD dwActualVresion;
HANDLE wlanHandle;
dwError = WlanOpenHandle(1, NULL, &dwActualVresion, &wlanHandle);
if (dwError != ERROR_SUCCESS)
{
return;
}
PWLAN_INTERFACE_INFO_LIST pInterfaceList = NULL;
dwError = WlanEnumInterfaces(wlanHandle, NULL, &pInterfaceList);
if (dwError != ERROR_SUCCESS)
{
return;
}
if (pInterfaceList->dwNumberOfItems == 0)
{
return;
}
bool findConnectedSsid = false;
PWLAN_AVAILABLE_NETWORK_LIST pAvailableNetworkList = NULL;
while (m_WorkingSwitch)
{
for (DWORD cur = 0; cur < pInterfaceList->dwNumberOfItems; ++cur)
{
GUID &guid = pInterfaceList->InterfaceInfo[cur].InterfaceGuid;
dwError = WlanGetAvailableNetworkList(wlanHandle, &guid, 2, NULL, &pAvailableNetworkList);
for (DWORD idx = 0; idx < pAvailableNetworkList->dwNumberOfItems; ++idx)
{
if (pAvailableNetworkList->Network[idx].dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED)
{
std::string ssid((char *)(pAvailableNetworkList->Network[idx].dot11Ssid.ucSSID));
double quality = 1.0 * pAvailableNetworkList->Network[idx].wlanSignalQuality / 100;
//m_pMonitor->signal_SetNetworkInfo(ssid, quality);
findConnectedSsid = true;
break;
}
}
if (findConnectedSsid)
{
break;
}
}
}
network结构体详细信息见msdn
2. 连接本地网络
获取网络dns后缀
FIXED_INFO fi;
ULONG ulOutBufLen = sizeof(fi);
std::string ips;
// 获取本地电脑的网络参数
if (::GetNetworkParams(&fi, &ulOutBufLen) != ERROR_SUCCESS)
{
return ;
}
bool findConneted = false;
IP_ADDR_STRING *pDns = &(fi.DnsServerList);
struct hostent *pHost = NULL;
struct in_addr s;
while (pDns)
{
inet_pton(AF_INET, pDns->IpAddress.String, (void *)&s);
pHost = (struct hostent *)gethostbyaddr((char *)&s, 16, AF_INET);
for (int i = 0; pHost != NULL && pHost->h_addr_list[i]; ++i)
{
char* psz = inet_ntoa(*(struct in_addr *)pHost->h_addr_list[i]);
ips.clear();
ips.append(pHost->h_name);
size_t idx = ips.find_first_of('.', 0);
ips.erase(0, idx + 1);
}
pDns = pDns->Next;
}
//m_pMonitor->signal_SetNetworkInfo(ips, -1);