C#打开WiFi热点,WiFi共享的四种方式总结(一)

拚忘的博客园要开始写随笔了,第一期就先讲讲wifi热点吧.....

持续更新C#、wpf、.NetCore相关内容,欢迎关注!!

 

C#打开WiFi热点,WiFi共享的四种方式总结(一)

C#打开WiFi热点,WiFi共享的四种方式总结(二)

C#打开WiFi热点,WiFi共享的四种方式总结(三)

C#打开WiFi热点,WiFi共享的四种方式总结(四)

C# Windows系统 ,WiFi共享的方式,打开WiFi热点我最近研究总结了又四种方式开启。

1.通过netsh wlan命令行开启

2.通过wlanapi接口共享

3.通过Win10 Api开启,Windows.Devices.WiFiDirect

4.通过Win10 api,Windows.Networking.NetworkOperators.NetworkOperatorTetheringManager 开启电脑自带的热点。

 

一、下面简单说一下以前最常用的一种方式,基本百度搜一下都是这种方式。

第一种方式在Win7系统下比较常用的,需要网卡支持网络承载,通过CMD命令启动。

主要命令:

1、启用并设定虚拟WiFi网卡:.

netsh wlan set hostednetwork mode=allow ssid=pwj key=12345678

此命令有三个参数,mode:是否启用虚拟WiFi网卡,改为disallow则为禁用。
                               ssid:无线网名称,最好用英文。
                               key:无线网密码,八个以上字符(以12345678为例)。

2、开启成功后,网络连接中会多出一个网卡为“Microsoft Virtual WiFi Miniport Adapter”的无线连接。若没有,只需更新无线网卡驱动了。
3、设置Internet连接共享:
在“网络连接”窗口中,右键单击已连接到Internet的网络连接,选择“属性”→“共享”,勾上“允许其他······连接(N)”并选择“虚拟WiFi”。
确定之后,提供共享的网卡图标旁会出现“共享的”字样,表示“宽带连接”已共享至“虚拟WiFi”。
4、开启无线网络:
继续在命令提示符中运行:netsh wlan start hostednetwork
(将start改为stop即可关闭该无线网,以后开机后要启用该无线网只需再次运行此命令即可)

 

如何查看网卡是否支持承载,通过CMD执行netsh wlan show drivers。

 

相关代码:新建共享网络

 public  string executeCmd(string command)
        {
            Process process = new Process
            {
                StartInfo = { FileName = " cmd.exe ", UseShellExecute = false, RedirectStandardInput = true, RedirectStandardOutput = true, CreateNoWindow = true }
            };
            process.Start();
            process.StandardInput.WriteLine(command);
            process.StandardInput.WriteLine("exit");
            process.WaitForExit();
            string str = process.StandardOutput.ReadToEnd();
            process.Close();
            return str;
        }

        /// <summary>
        /// 共享网络
        /// </summary>
        /// <param name="wifiName">WiFi名称</param>
        /// <param name="wifiPassword">WiFi密码(不少于8位)</param>
        /// <returns>"新建共享网络成功!"||"搭建失败,请重试!"</returns>
        public  bool AllowWiFi(string wifiName, string wifiPassword, out string createWifiRet)
        {
            createWifiRet = "搭建失败,请重试!";
            try
            {
                string command = "netsh wlan set hostednetwork mode=allow ssid=" + wifiName.Trim() + " key=" + wifiPassword.Trim();
                string cmdExecRet = executeCmd(command);
                createWifiRet = cmdExecRet;
                if (((createWifiRet.IndexOf("承载网络模式已设置为允许") > -1) && (createWifiRet.IndexOf("已成功更改承载网络的 SSID。") > -1)) && (createWifiRet.IndexOf("已成功更改托管网络的用户密钥密码。") > -1))
                {
                    createWifiRet = "新建共享网络成功!";
                    return true;
                }
                return false;
            }
            catch (Exception e)
            {
                createWifiRet = e.Message;
                return false;
            }
        }

 

 启动共享

  /// <summary>
        /// 启动承载网络(WiFi)
        /// </summary>
        /// <returns>"已启动承载网络!"||"启动承载网络失败,请尝试新建网络共享!"</returns>
        public  bool StartWiFi(out string startWifiRet)
        {
            startWifiRet = "启动承载网络失败,请尝试新建网络共享!";
            try
            {
                if (executeCmd("netsh wlan start hostednetwork").IndexOf("已启动承载网络") > -1)
                {
                    startWifiRet = "已启动承载网络!";
                    return true;
                }
                return false;
            }
            catch (Exception e)
            {
                startWifiRet = e.Message;
                return false;
            }
        }

 

停止

 /// <summary>
        /// 禁止共享网络
        /// </summary>
        /// <returns>disallowWifiRet = "禁止共享网络成功!"||"操作失败,请重试!"</returns>
        public  bool DisallowWifi(out string disallowWifiRet)
        {
            disallowWifiRet = "操作失败,请重试!";
            try
            {
                string command = "netsh wlan set hostednetwork mode=disallow";
                if (executeCmd(command).IndexOf("承载网络模式已设置为禁止") > -1)
                {
                    disallowWifiRet = "禁止共享网络成功!";
                    return true;
                }
                return false;
            }
            catch (Exception e)
            {
                disallowWifiRet = e.Message;
                return false;
            }
        }

        /// <summary>
        /// 停止承载网络(WiFi)
        /// </summary>
        /// <returns>"已停止承载网络!"||"停止承载网络失败!"</returns>
        public  bool StopWiFi(out string stopWifiRet)
        {
            stopWifiRet = "停止承载网络失败!";
            try
            {
                if (executeCmd("netsh wlan stop hostednetwork").IndexOf("已停止承载网络") > -1)
                {
                    return true;
                }
                return false;
            }
            catch (Exception e)
            {
                stopWifiRet = e.Message;
                return false;
            }
        }
View Code

 

 最后看一下效果:

 

代码下载地址可以去我gitee上下载:https://gitee.com/panwangvie

posted @ 2021-06-12 16:04  拚忘  阅读(218)  评论(0编辑  收藏  举报