一个用C#实现的虚拟WiFi设置程序
前言:
本人常年使用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的二次调用。首先是生成界面:
                                                                            
窗体上的两个输入框用来在更改和设置虚拟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 = "cmd.exe";
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("exit");
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 = @"netsh wlan show hostednetwork";
19: start = @"netsh wlan start hostednetwork";
20: stop = @"netsh wlan stop hostednetwork";
21: allow = @"netsh wlan set hostednetwork mode=allow";
22: disallow = @"netsh wlan set hostednetwork mode=disallow";
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("SSID以及密码不可为空!");
31: return;
32: }
33: string setting = allow + " ssid=" + textBox1.Text + " key=" + 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: }
一个用C#实现的虚拟WiFi设置程序的更多相关文章
- 【计算机-虚拟wifi】Win7虚拟wifi设置
		
虚拟Wifi,可以让电脑变成无线路由器,实现共享上网. 设置步骤 1.以管理员身份运行:cmd.exe 2.启动并设置虚拟网卡: 命令窗口中输入: netsh wlan set host ...
 - 设置虚拟wifi,手机和电脑可以连接
		
在家里没有wifi,笔记本电脑又是宽带连接,有时候手机流量用得很快,于是网上找了一下设置虚拟wifi 方法. 1.首先你的电脑上要有无线网卡,并且无线网上一定要是开户的,一般默认的都开启,如果没有开启 ...
 - win7设置虚拟wifi
		
1. cmd,使用管理员权限打开: 2. 设置:netsh wlan set hostednetwork mode=allow ssid=ABCD key=12345678 mode:是否开启虚拟wi ...
 - WIN10 CMD 启动虚拟WIFI
		
1.以管理员身份运行命令提示符: 快捷键win+R→输入cmd→回车 2.启用并设定虚拟WiFi网卡: 运行命令:netsh wlan set hostednetwork mode=allow ssi ...
 - 完美实现开机启动虚拟WIFI,顺便实现目前的WP8系统使用VPN(7.1修)
		
众所周知,windows7系统的机器若带有无线网卡(台式机可以买一个USB无线网卡,京东目前39元,TP-Link的),可以虚拟出wifi,供手机等移动设备使用. 虚拟的WIFI的命了和软件在网上都找 ...
 - windows7开启虚拟wifi和虚拟无线AP的方法
		
你可以开启windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP),就可以让电脑变成无线路由器,实现共享上网. 1.点开始 所有程序 命令提示符右键管理员身份运行命令 ...
 - Win7笔记本电脑启用虚拟WIFI共享上网
		
今天看了一个帖子,win7系统通过笔记本的无线网卡,启用虚拟Wifi功能共享上网,自己尝试了一下,感觉很好用,至少没有无线路由的自己,手机可以上wifi了,更新软件玩微信等等,都方便多了,好了,废话不 ...
 - Win7下Netsh虚拟Wi-Fi
		
Netsh的字面意思是网络外壳,其实它是一个命令行实用程序,最初出现于Windows 2000操作系统,它可以帮助管理WINDOWS中的网络设置.此后,微软不断对它进行改进,给它增加了一些新的命令集. ...
 - 使用无线网卡搭建虚拟wifi
		
1.首先以管理员身份运行命令提示符 开始->搜索框输入cmd,出来的cmd.exe上右键管理员身份运行,或者win+R打开运行提示框,输入cmd并回车. 2.设置“虚拟Wifi网卡”模式 敲入命 ...
 
随机推荐
- C#创建https请求并使用pfx证书
			
常规情况下创建Web请求,并获取请求数据的代码如下: WebRequest req = WebRequest.Create(url); req.Timeout = 15000; WebResponse ...
 - HTTP协议分析及攻防方法
			
HTTP协议简介 应用层协议,无状态协议(可设定为维持TCP连接,但服务器端的资源会释放).默认HTTP的端口号为80,HTTPS的端口号为443. 基于HTTP协议的客户机访问包括4个过程,分别是建 ...
 - Restful与webService区别
			
有好多人问我们在设计底层服务的时候到底是应该选择目前最流行的RestFul架构还是选择老牌的webService呢?今天我就将这两个概念做一下阐述,到底什么情况下选择什么比较合理. 首先需要了解:RE ...
 - 五指cms标签说明汇总
			
1.栏目列表标签 只有一级导航: {wz:content action="category" cid="0" pagesize="100" ...
 - PHP字符串操作常用函数
			
/* * 确定字符串长度 * int strlen(string str) * 比较两个字符串 * 1.strcmp函数对两个字符串进行二进制安全的比较,并区分大小写 * int strcmp(str ...
 - Hadoop学习记录(4)|MapReduce原理|API操作使用
			
MapReduce概念 MapReduce是一种分布式计算模型,由谷歌提出,主要用于搜索领域,解决海量数据计算问题. MR由两个阶段组成:Map和Reduce,用户只需要实现map()和reduce( ...
 - HW1.1
			
public class Solution { public static void main(String[] args) { System.out.println("Welcome to ...
 - 2013 ACM/ICPC Asia Regional Changsha Online–C (模拟)
			
题目描述 略... 题解 注意控制精度即可....变量全部定义成double,结果round就行....妈蛋....被这题目恶心死了.... 代码: #include <iostream> ...
 - httpclient在抓取网页时出现速度慢的情况分析
			
问题: 最近在使用httpclient3.0 来做项目,在一台机器部署系统后,发现此机器比其它机器在抓取页面的速度上慢了大概4s,左右. 项目是部署在局域内网,所以代码中都是直接写的IP地址 .在使用 ...
 - 授权给adfs读取ad   在ad服务器上运行 - setspn 命令 -摘自网络
			
Because the application pool identity for the AD FS 2.0 AppPool is running as a domain user/service ...