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);