static void Main(string[] args) { //1.首先回去句柄 uint serviceVersion = 0; IntPtr handle = IntPtr.Zero; uint result = WlanOpenHandle(2, IntPtr.Zero, out serviceVersion, ref handle); if (result == 0) { try { //2.列举无线设备,如果你有几个无线网卡,这里就需要选择使用哪一个无线网卡设备 IntPtr ppInterfaceList = IntPtr.Zero; WLAN_INTERFACE_INFO_LIST interfaceList; result = WlanEnumInterfaces(handle, IntPtr.Zero, ref ppInterfaceList); if (result == 0) { interfaceList = new WLAN_INTERFACE_INFO_LIST(ppInterfaceList); //记得释放内存 WlanFreeMemory(ppInterfaceList); //3.假设只有一个无线设备,通过这个无线设置获取可见网络列表 IntPtr ppAvailableNetworkList = new IntPtr(); result = WlanGetAvailableNetworkList(handle, ref interfaceList.InterfaceInfo[0].InterfaceGuid, 0x00000002, new IntPtr(), ref ppAvailableNetworkList); if (result == 0) { WLAN_AVAILABLE_NETWORK_LIST wlan_available_network_list = new WLAN_AVAILABLE_NETWORK_LIST(ppAvailableNetworkList); //这里也不要忘记释放内存 WlanFreeMemory(ppAvailableNetworkList); //打印结果出来看看 for (int i = 0; i < wlan_available_network_list.wlanAvailableNetwork.Length; i++) { Console.WriteLine(wlan_available_network_list.wlanAvailableNetwork[i].dot11Ssid.ucSSID); } } } } catch (Exception) { throw; } finally { //记得要关闭句柄 WlanCloseHandle(handle, IntPtr.Zero); } } }
/// <summary> /// 获取无线网络的过程 /// </summary> public WLAN_AVAILABLE_NETWORK_LIST EnumerateAvailableNetwork() { WLAN_AVAILABLE_NETWORK_LIST wlanAvailableNetworkList = new WLAN_AVAILABLE_NETWORK_LIST(); uint serviceVersion = 0; IntPtr handle = IntPtr.Zero; int result; result = (int)WlanOpenHandle(2, IntPtr.Zero, out serviceVersion, ref handle); //Console.WriteLine(result); IntPtr ppInterfaceList = IntPtr.Zero; WLAN_INTERFACE_INFO_LIST interfaceList; if (WlanEnumInterfaces(handle, IntPtr.Zero, ref ppInterfaceList) == 0) { interfaceList = new WLAN_INTERFACE_INFO_LIST(ppInterfaceList); //Console.WriteLine("有{0}个无线网络适配器", interfaceList.dwNumberOfItems); //Console.WriteLine("Enumerating Wireless Network Adapters..."); for (int i = 0; i < interfaceList.dwNumberOfItems; i++) { //Console.WriteLine("{0}", interfaceList.InterfaceInfo[i].strInterfaceDescription); IntPtr ppAvailableNetworkList = new IntPtr(); Guid pInterfaceGuid = interfaceList.InterfaceInfo[i].InterfaceGuid; WlanGetAvailableNetworkList(handle, ref pInterfaceGuid, 0x00000002, new IntPtr(), ref ppAvailableNetworkList); wlanAvailableNetworkList = new WLAN_AVAILABLE_NETWORK_LIST(ppAvailableNetworkList); WlanFreeMemory(ppAvailableNetworkList); WlanCloseHandle(handle, IntPtr.Zero); //for (int j = 0; j < wlanAvailableNetworkList.dwNumberOfItems; j++) //{ // WLAN_AVAILABLE_NETWORK network = wlanAvailableNetworkList.wlanAvailableNetwork[j]; // Console.ForegroundColor = ConsoleColor.Red; // Console.WriteLine("Available Network: "); // Console.WriteLine("SSID: " + network.dot11Ssid.ucSSID); // Console.WriteLine("StrProfile:" + network.strProfileName); // Console.WriteLine("Encrypted: " + network.bSecurityEnabled); // Console.WriteLine("Signal Strength: " + network.wlanSignalQuality); // Console.WriteLine("Default Authentication: " + // network.dot11DefaultAuthAlgorithm.ToString()); // Console.WriteLine("Default Cipher: " + network.dot11DefaultCipherAlgorithm.ToString()); // Console.WriteLine(); // Console.Read(); //} return(wlanAvailableNetworkList); } } return(wlanAvailableNetworkList); }
/// <summary> /// Gets SSIDs of available wireless LANs. /// </summary> /// <returns>SSIDs</returns> public static IEnumerable <string> GetAvailableNetworkSsids() { var clientHandle = IntPtr.Zero; var interfaceList = IntPtr.Zero; var availableNetworkList = IntPtr.Zero; try { uint negotiatedVersion; if (WlanOpenHandle( 2, // Client version for Windows Vista and Windows Server 2008 IntPtr.Zero, out negotiatedVersion, out clientHandle) != ERROR_SUCCESS) { yield break; } if (WlanEnumInterfaces( clientHandle, IntPtr.Zero, out interfaceList) != ERROR_SUCCESS) { yield break; } var interfaceInfoList = new WLAN_INTERFACE_INFO_LIST(interfaceList); Debug.WriteLine("Interface count: {0}", interfaceInfoList.dwNumberOfItems); foreach (var interfaceInfo in interfaceInfoList.InterfaceInfo) { if (WlanGetAvailableNetworkList( clientHandle, interfaceInfo.InterfaceGuid, WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_PROFILES, IntPtr.Zero, out availableNetworkList) != ERROR_SUCCESS) { continue; } var networkList = new WLAN_AVAILABLE_NETWORK_LIST(availableNetworkList); foreach (var network in networkList.Network) { Debug.WriteLine("Interface: {0}, SSID: {1}, Signal: {2}", interfaceInfo.strInterfaceDescription, network.dot11Ssid, network.wlanSignalQuality); yield return(network.dot11Ssid.ToString()); } } } finally { if (availableNetworkList != IntPtr.Zero) { WlanFreeMemory(availableNetworkList); } if (interfaceList != IntPtr.Zero) { WlanFreeMemory(interfaceList); } if (clientHandle != IntPtr.Zero) { WlanCloseHandle(clientHandle, IntPtr.Zero); } } }
/// <summary> /// Gets SSIDs of available wireless LANs. /// </summary> /// <returns>SSIDs</returns> public static IEnumerable<string> GetAvailableNetworkSsids() { var clientHandle = IntPtr.Zero; var interfaceList = IntPtr.Zero; var availableNetworkList = IntPtr.Zero; try { uint negotiatedVersion; if (WlanOpenHandle( 2, // Client version for Windows Vista and Windows Server 2008 IntPtr.Zero, out negotiatedVersion, out clientHandle) != ERROR_SUCCESS) yield break; if (WlanEnumInterfaces( clientHandle, IntPtr.Zero, out interfaceList) != ERROR_SUCCESS) yield break; var interfaceInfoList = new WLAN_INTERFACE_INFO_LIST(interfaceList); Debug.WriteLine("Interface count: {0}", interfaceInfoList.dwNumberOfItems); foreach (var interfaceInfo in interfaceInfoList.InterfaceInfo) { if (WlanGetAvailableNetworkList( clientHandle, interfaceInfo.InterfaceGuid, WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_PROFILES, IntPtr.Zero, out availableNetworkList) != ERROR_SUCCESS) continue; var networkList = new WLAN_AVAILABLE_NETWORK_LIST(availableNetworkList); foreach (var network in networkList.Network) { Debug.WriteLine("Interface: {0}, SSID: {1}, Signal: {2}", interfaceInfo.strInterfaceDescription, network.dot11Ssid, network.wlanSignalQuality); yield return network.dot11Ssid.ToString(); } } } finally { if (availableNetworkList != IntPtr.Zero) WlanFreeMemory(availableNetworkList); if (interfaceList != IntPtr.Zero) WlanFreeMemory(interfaceList); if (clientHandle != IntPtr.Zero) WlanCloseHandle(clientHandle, IntPtr.Zero); } }