实现使用C#代码完成wifi的切换和连接功能

实现使用C#代码完成wifi的切换和连接功能
代码如下:

namespace Wifi连接器
{
    public partial class Form1 : Form
    {
        private List<Wlan.WlanAvailableNetwork> NetWorkList = new List<Wlan.WlanAvailableNetwork>();
        private WlanClient.WlanInterface WlanIface;
        public Form1()
        {
            InitializeComponent();

        }

        void WlanIface_WlanConnectionNotification(Wlan.WlanNotificationData notifyData, Wlan.WlanConnectionNotificationData connNotifyData)
        {
            if (notifyData.notificationSource == NativeWifi.Wlan.WlanNotificationSource.MSM)
            {
                //这里是完成连接
                if ((NativeWifi.Wlan.WlanNotificationCodeMsm)notifyData.NotificationCode == NativeWifi.Wlan.WlanNotificationCodeMsm.Connected)
                {
                    Invoke(new Action(() =>
                    {
                        label2.Text = connNotifyData.profileName;
                    }));
                }
            }
            else if (notifyData.notificationSource == NativeWifi.Wlan.WlanNotificationSource.ACM)
            {
                //连接失败
                if ((NativeWifi.Wlan.WlanNotificationCodeAcm)notifyData.NotificationCode == NativeWifi.Wlan.WlanNotificationCodeAcm.ConnectionAttemptFail)
                {
                    Invoke(new Action(() =>
                    {
                        label2.Text = "未连接";
                    }));
                    MessageBox.Show("连接失败,请检查密码是否正确");
                    WlanIface.DeleteProfile(connNotifyData.profileName);
                }
                if ((NativeWifi.Wlan.WlanNotificationCodeAcm)notifyData.NotificationCode == NativeWifi.Wlan.WlanNotificationCodeAcm.Disconnected)
                {
                    Invoke(new Action(() =>
                    {
                        label2.Text = "未连接";
                    }));
                }
                if ((NativeWifi.Wlan.WlanNotificationCodeAcm)notifyData.NotificationCode == NativeWifi.Wlan.WlanNotificationCodeAcm.Disconnecting)
                {
                    Invoke(new Action(() =>
                    {
                        label2.Text = "未连接";
                    }));
                }
                if ((NativeWifi.Wlan.WlanNotificationCodeAcm)notifyData.NotificationCode == NativeWifi.Wlan.WlanNotificationCodeAcm.ConnectionStart)
                {
                    Invoke(new Action(() =>
                    {
                        label2.Text = "连接中…";
                    }));
                }
            }

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            WlanClient client = new WlanClient();
            WlanIface = client.Interfaces[0];//一般就一个网卡,有2个没试过。
            WlanIface.WlanConnectionNotification += WlanIface_WlanConnectionNotification;
            LoadNetWork();
        }

        private void LoadNetWork()
        {
            System.Int32 dwFlag = new Int32();
            Wlan.WlanAvailableNetwork[] networks = WlanIface.GetAvailableNetworkList(0);
            foreach (Wlan.WlanAvailableNetwork network in networks)
            {
                string SSID = WlanHelper.GetStringForSSID(network.dot11Ssid);
                if (network.flags.HasFlag(Wlan.WlanAvailableNetworkFlags.Connected))
                {
                    label2.Text = SSID;
                }
                //如果有配置文件的SSID会重复出现。过滤掉
                if (!listBox1.Items.Contains(SSID))
                {
                    listBox1.Items.Add(SSID);
                    NetWorkList.Add(network);
                }
            }

            //信号强度排序
            NetWorkList.Sort(delegate(Wlan.WlanAvailableNetwork a, Wlan.WlanAvailableNetwork b)
            {
                return b.wlanSignalQuality.CompareTo(a.wlanSignalQuality);
            });
            listBox1.Items.Clear();
            foreach (Wlan.WlanAvailableNetwork network in NetWorkList)
            {
                listBox1.Items.Add(WlanHelper.GetStringForSSID(network.dot11Ssid));
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Wlan.WlanAvailableNetwork wn = NetWorkList[listBox1.SelectedIndex];
            if (wn.securityEnabled && !WlanHelper.HasProfile(WlanIface, WlanHelper.GetStringForSSID(wn.dot11Ssid)))
            {
                Form_Password fp = new Form_Password();
                if (fp.ShowDialog() == DialogResult.OK)
                {
                    string pw = fp.Password;

                    WlanHelper.ConnetWifi(WlanIface, wn, pw);
                    fp.Dispose();
                }
            }
            else
            {
                WlanHelper.ConnetWifi(WlanIface, wn);
            }

        }

        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            Wlan.WlanAvailableNetwork wn = NetWorkList[listBox1.SelectedIndex];
            toolTip1.SetToolTip(listBox1, WlanHelper.GetWifiToolTip(wn));
        }

        private void label3_Click(object sender, EventArgs e)
        {
            NetWorkList.Clear();
            listBox1.Items.Clear();
            LoadNetWork();
        }
    }
}

源码已经上传,大家需要可自行查看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/498899.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习算法的另一个分支-贝叶斯算法原理(贝叶斯要解决什么问题)

目录 一、贝叶斯简介 二、贝叶斯要解决的问题 三、例子&#xff08;公式推导&#xff09; 四、实例 1. 拼写纠正实例 2. 垃圾邮件过滤实例 一、贝叶斯简介 1. 贝叶斯&#xff1a;英国数学家。1702年出生于伦敦&#xff0c;做过神甫。贝叶斯在数学方面主要研究概率论.对于…

Request对象

目录 1、GET方法 2、POST方法 引出问题&#xff1a;我们前面在赋值的时候&#xff0c;都是在一个页面进行赋值&#xff0c;那么怎么样将web1的数据传送到web2中呢&#xff0c;这时候&#xff0c;就要用到request方法了。 作用&#xff1a;Request对象主要是让服务器取得客户…

蓝桥杯算法题练习

1、20世纪有多少个星期一 &#xff08;1901、1、1——2000、12、31&#xff09; 方法一&#xff1a;python代码 方法二&#xff1a;excel工具(设置单元格格式&#xff0c;把日期换成周几的形式) 2、100个数相乘&#xff0c;结果有几个0 3、切面条 找规律:对折次数n 弯2^n-1 面…

公众号 服务号 代码创建菜单方法 公众号跳转小程序功能 40027错误的解决

需求 通过代码实现微信公众号的自定义菜单&#xff0c;新增、同步菜单。 分析 其实对一个公众号而言&#xff0c;菜单只要创建一次就可以了&#xff0c;如果你不是服务商&#xff0c;可以直接使用微信提供的代码调试工具&#xff0c;直接发送json字符串&#xff0c;为自己的…

系统开发实训小组作业week5 —— 用例描述与分析

目录 4.3 UC003电影浏览与查询 4.3.1 用例描述 4.3.2 活动图 4.3.3 界面元素 4.3.4 功能 4.4 UC004在线订票 4.4.1 用例描述 4.4.2 活动图 4.4.3 界面元素 4.4.4 功能 4.3 UC003电影浏览与查询 4.3.1 用例描述 用例号 UC003-01 用例名称 电影浏览与查询 用例描述…

App 测试必备 - 建议所有测试人收藏

移动端App性能测试需要关注多个方面&#xff0c;包括响应时间、稳定性、内存使用、CPU使用率、网络性能、电池消耗以及设备兼容性等。通过综合考虑这些方面&#xff0c;并在不同条件下进行全面的测试&#xff0c;可以确保应用程序在各种情况下都能够提供优质的用户体验&#xf…

AI人像写真解决方案,满足企业多样化视觉需求

美摄科技&#xff0c;作为一家专注于人工智能技术研发与应用的高新企业&#xff0c;深知企业对于高质量、高效率视觉内容的需求&#xff0c;特推出AI人像写真解决方案&#xff0c;为企业打开全新的视觉营销通道。 我们的AI人像写真解决方案&#xff0c;基于深度学习和计算机视…

解密EMC与EMI:电磁兼容性与电磁干扰?|深圳比创达电子

在现代电子设备愈发普及的时代&#xff0c;EMC&#xff08;Electromagnetic Compatibility&#xff09;和EMI&#xff08;Electromagnetic Interference&#xff09;成为了不容忽视的重要议题。本文将从根本概念出发&#xff0c;逐步深入探讨这两个关键领域&#xff0c;带领各位…

【信贷后台管理之登录(一)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录结构一、项目搭建二、登录页面1.引入Element-ui2.LoginView.vue组件3.router文件的index.js引入组件 gitee仓库地址 目录结构 一、项目搭建 找到存放项目的文件…

解析旅游者心声:用PySpark和SnowNLP揭秘景区评论的情感秘密

简介: 在本篇博客中,我们将探讨如何利用PySpark和SnowNLP这两个强大的工具来分析大规模的旅游评论数据。通过结合携程和去哪儿的数据作为示例,我们将探索如何从海量的评论中提取有价值的情感信息和洞察。PySpark作为一种分布式计算框架,能够处理大规模的数据集,为我们提供…

Java服务运行在Linux----维护常用命令

想起来哪些再添加上去 查看Java程序进程 jps -l 查出进程后根据pid 查询程序所在目录 pwdx 31313 根据端口查找PID 根据pid杀死程序 kill -p 31313 查看目录下所有包含9527的文件 grep -rn 9527 查看磁盘空间 查找文件名"nginx"文件或模糊查找"*nginx*&quo…

Mysql中如何显示第几周

在数据分析中&#xff0c;经常需要对日期和时间进行格式化处理&#xff0c;以便更直观地展示和理解数据。 MySQL 5.7提供了强大的DATE_FORMAT函数&#xff0c;允许用户根据特定的格式字符串来显示日期和时间。 Week函数 最直接的是使用YEAR、WEEK函数 SELECTYEAR(NOW()) AS C…

健身运动耳机哪个牌子好?力荐五大品质翘楚的精品

健身已经成为许多人追求健康与活力的重要方式&#xff0c;而在健身的过程中&#xff0c;一款优质的耳机不仅能让你沉浸于音乐的世界&#xff0c;更能提升运动体验&#xff0c;激发无限潜能&#xff0c;那么如何选择一款既适合运动又品质卓越的耳机呢&#xff1f;今天我这个健身…

【热门话题】Yarn:新一代JavaScript包管理器的安装与使用

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Yarn&#xff1a;新一代JavaScript包管理器的安装与使用引言一、Yarn的安装1. 系…

element-ui inputNumber 组件源码分享

今日简单分享 inputNumber 组件的实现原理&#xff0c;主要从以下四个方面来分享&#xff1a; 1、inputNumber 组件的页面结构 2、inputNumber 组件的属性 3、inputNumber 组件的事件 4、inputNumber 组件的方法 一、inputNumber 组件的页面结构。 二、inputNumber 组件的…

linux安装Zookeeper的详细步骤

1.Java环境确认 确保已经安装了Java环境&#xff0c;没有的自行安装 2.官网下载包 Apache ZooKeeper 3.安装 3.1上传到linux&#xff0c;解压 我的目录为/root/apache-zookeeper-3.8.4-bin 进入到/root/apache-zookeeper-3.8.4-bin/conf目录下&#xff0c;执行命令复制zoo…

由浅到深认识Java语言(44):Junit单元测试

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

硬件12、PCB模块化布局

模块画布局其实就是根据原理图中绘制的小模块&#xff0c;比如3.3V芯片及其外围电路部分的元器件在PCB中放在一起进行布线&#xff0c;会方便很多 1、最好打开分屏&#xff0c;一边在原理图中选中模块&#xff0c;一边在PCB中绘制 2、选中原理图中的模块的所有元件&#xff0…

工业智能物联网关如何助力工业防震减灾

地震灾害难以预料&#xff0c;一旦发生往往就损失重大。对于工业领域而言&#xff0c;地震灾害的影响不仅仅是对人员安全的威胁&#xff0c;还包括对生产设施的破坏、生产进程的中断以及伴生的持续性经济损失。 随着5G、大数据、物联网技术的发展&#xff0c;面向工业领域构建一…

有效的数独-java

题目描述: 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#…
最新文章