设为首页 收藏本站
查看: 1235|回复: 0

[经验分享] 一个用C#实现的虚拟WiFi设置程序

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-30 11:17:42 | 显示全部楼层 |阅读模式
前言:
     
      本人常年使用Windows 7(虽然在努力学习Ubuntu,但是必须承认Windows 7上拥有大量的优秀软件,比如Evernote、Microsoft Office等)。但是由于学校的网络是通过绑定MAC和IP地址,然后客户端登录的模式提供网络服务的,所以同一时间只能够允许一台设备上网(学校的客户端会检测路由器,一旦检测到就会断开连接)。
      这时候Windows 7的虚拟WiFi就成了手机和平板电脑的救命稻草。虚拟WiFi需要一定的硬件支持,但是现在的笔记本一般都没问题,本文不再讨论了。虚拟WiFi开启的方式一般有两种:(1)使用类似Connectify的工具软件。(2)使用命令提示符进行设置。本文介绍笔者的一个用来设置虚拟WiFi的小程序,其关键就是对命令提示符的二次调用。
  开启虚拟WiFi:
  (一)工具软件
  本人用过的软件只有Connectify。不得不说这是一款很好的软件,界面友好、功能齐全。但是在本人的笔记本上工作却不是很正常,打开初始化的过程非常卡(Y470 Win7 x64)。所以后来我一般选择在命令提示符中手动开启。
  (二)命令提示符
  首先介绍一下在命令提示符下开启虚拟WiFi:
  1、打开命令提示符cmd。(注意需要用管理员权限)
  2、开启虚拟WiFi:    netsh wlan set hostednetwork mode=allow ssid=NameString key=KeyString(mode=disallow可以禁用虚拟WiFi,ssid表示热点名称,key则为连接到热点的密码)
  3、设置连接源:打开控制面板,按照 控制面板 => 网络和 Internet => 网络连接的顺序打开,你会发现多了一个Microsoft Virtual WiFi Miniport Adapter。按照你的信号源(如果连有线的就选本地连接,连无线的就选无线网络连接),右键属性 => 共享 勾选第一个选项,然后在下拉列表中选择那个多出来的无线网络连接。
  4、开启虚拟WiFi:     netsh wlan start hostednetwork
  5、关闭虚拟WiFi:     netsh wlan stop hostednetwork
  可以发现,如果每次开启和关闭虚拟WiFi都要输入那么长一串命令的确很麻烦,一个简便的处理方式是将命令作为批处理方式。将这两个命令分别写入到txt文件中,然后将后缀名改为bat,批处理文件就做好了。
  自己动手,丰衣足食:
  事实上,用两个批处理文件的确可以了,但是把两个bat文件放在桌面上不嫌丑吗?再说被人蹭网也是常事,如果要改密码那么就必须重新修改命令,还是有点麻烦。于是本着计算机专业学生的二愣子精神,我打算自己动手做一个小程序来完成虚拟WiFi的开启、关闭、修改、禁用等功能。
  其实吧,作为一个半桶水本人也不会修改操作系统的一些参数。于是我就打算在cmd外面加一层壳,用WindowsForm做一个cmd的二次调用。首先是生成界面:
  
DSC0000.png
  
  窗体上的两个输入框用来在更改和设置虚拟WiFi的SSID和连接密码。显示信息可以显示出连接的连接设备数目等信息。开启和关闭分别对应start和stop命令,禁用会删除虚拟的无线连接。最后说说这个输出面板,这是用来显示cmd中的输入信息,但是不能从这里输入。
  程序代码 :
  最重要也是实现的关键——对CMD的调用:
  1: using System;
  2: using System.Collections.Generic;
  3: using System.Linq;
  4: using System.Text;
  5: using System.Diagnostics;
  6: using System.IO;
  7:
  8: namespace VirtualWiFi
  9: {
10:     class Command
11:     {
12:         public static string RunCMD(List<string> commands)
13:         {
14:             System.Diagnostics.Process p = new System.Diagnostics.Process();
15:             //设定程序名;
16:             p.StartInfo.FileName = &quot;cmd.exe&quot;;
17:             //关闭shell的使用;
18:             p.StartInfo.UseShellExecute = false;
19:             //cmd窗口不显示;
20:             p.StartInfo.CreateNoWindow = true;
21:             //重定向标准输入、输出、错误输出;
22:             p.StartInfo.RedirectStandardError = true;
23:             p.StartInfo.RedirectStandardInput = true;
24:             p.StartInfo.RedirectStandardOutput = true;
25:
26:             p.Start();
27:             foreach (string command in commands)
28:             {
29:                 p.StandardInput.WriteLine(command);
30:             }
31:             p.StandardInput.WriteLine(&quot;exit&quot;);
32:
33:             //读取返回信息;
34:             return p.StandardOutput.ReadToEnd();
35:         }
36:     }
37: }
  然后是窗体的事件处理程序:

  1: using System;
  2: using System.Collections.Generic;
  3: using System.Windows.Forms;
  4:
  5: namespace VirtualWiFi
  6: {
  7:     public partial class Form1 : Form
  8:     {
  9:         private readonly string allow;
10:         private readonly string disallow;
11:         private readonly string show;
12:         private readonly string start;
13:         private readonly string stop;
14:
15:         public Form1()
16:         {
17:             InitializeComponent();
18:             show = @&quot;netsh wlan show hostednetwork&quot;;
19:             start = @&quot;netsh wlan start hostednetwork&quot;;
20:             stop = @&quot;netsh wlan stop hostednetwork&quot;;
21:             allow = @&quot;netsh wlan set hostednetwork mode=allow&quot;;
22:             disallow = @&quot;netsh wlan set hostednetwork mode=disallow&quot;;
23:         }
24:
25:         private void buttonOK_Click(object sender, EventArgs e)
26:         {
27:             if (textBox1.Text == null || textBox1.Text.Length == 0 ||
28:                 textBox2.Text == null || textBox2.Text.Length == 0)
29:             {
30:                 MessageBox.Show(&quot;SSID以及密码不可为空!&quot;);
31:                 return;
32:             }
33:             string setting = allow + &quot; ssid=&quot; + textBox1.Text + &quot; key=&quot; + textBox2.Text;
34:             var commands = new List<string>();
35:             commands.Add(setting);
36:             commands.Add(show);
37:             Command.RunCMD(commands);
38:         }
39:
40:         private void radioButtonStart_CheckedChanged(object sender, EventArgs e)
41:         {
42:             var commands = new List<string>();
43:             commands.Add(start);
44:             textBox3.Text = Command.RunCMD(commands);
45:         }
46:
47:         private void radioButtonStop_CheckedChanged(object sender, EventArgs e)
48:         {
49:             var commands = new List<string>();
50:             commands.Add(stop);
51:             textBox3.Text = Command.RunCMD(commands);
52:         }
53:
54:         private void buttonDisplay_Click(object sender, EventArgs e)
55:         {
56:             var commands = new List<string>();
57:             commands.Add(show);
58:             textBox3.Text = Command.RunCMD(commands);
59:         }
60:
61:         private void buttonForbidden_Click(object sender, EventArgs e)
62:         {
63:             var commands = new List<string>();
64:             commands.Add(disallow);
65:             textBox3.Text = Command.RunCMD(commands);
66:         }
67:     }
68: }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-120872-1-1.html 上篇帖子: 树莓派2B 安装小米wifi驱动 下篇帖子: android wifi之ConnectivityService
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表