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);
                }
            }
        }
Example #2
0
        /// <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);
                }
            }
        }
Example #4
0
		/// <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);
			}
		}