通过程序启用/禁用 网络连接(提供4种思路 你值得拥有)

一。场景回顾:

写这篇文章的主要原因是这些天,因为客户那边的需求,而更改的一个需求。在这过程中,翻阅了很多的资料,发现了几种方法,所以把一些我知道的方法贴出来,以飨读者。希望你们喜欢。

二。解决方案

2.1 通过命令行方式----netsh

说到这个,顺便给一个查看所以网络连接的命令:

netsh int show int -----注:int 也就是interface的意思,可以写全字或者缩写,都ok。

你看,上面罗列了所有我本地的网络连接。好的,其实我们在程序中 也是用这个语法,只是我们需要加一个set关键字。语法是:

netsh int set int name=“网络连接名” admin=disable/enable  connect=disconnected/connected newname=新的名字

对上面的语法,我们只需要关注name和admin就可以了,后面的2个不能用在非lan中。前2个很好理解,name,就是你网络连接的名字,比如Local Area Conenction;admin 指的是你要关闭或者重启你的网络连接。那在程序中怎么实现呢?

代码如下

          string args = "int set int name=‘本地网络连接’ admin=disable";
                ProcessStartInfo start = new ProcessStartInfo("netsh", args);
                start.UseShellExecute = false;
                start.CreateNoWindow = true;
                start.Verb = "runas";
                Process p = System.Diagnostics.Process.Start(start);

这样,就把本地网络连接这个给disable。

注:对name属性而言,如果有空格一定要用引号,如果没有空格则可不用。比如这里你也可以 name=本地网络连接。同理,后面的admin也可有可无引号。

顺便提一下,如果你想获取输出的一些数据,ok 你可以这样做,比如我想获取所有的网络连接。

List<string> lists = new List<string>();
            string args = "int show interface";
            ProcessStartInfo start = new ProcessStartInfo("netsh", args);
            start.UseShellExecute = false;
            start.CreateNoWindow = true;
            start.Verb = "runas";
            start.RedirectStandardOutput = true;
            Process p = Process.Start(start);

            StreamReader reader = p.StandardOutput;

            while (!reader.EndOfStream)
            {
                lists.Add(reader.ReadLine());
            }
            return lists;

其中,start.RedirectStandardOutput = trueStreamReader reader = p.StandardOutput是关键的地方。

优点:很方便使用,容易上手。

缺点:只能在win 2000、2003、2008以及win 7中使用。

2.2 使用WMI----Win32_NetworkAdapter

对,我们这里使用微软大名鼎鼎的WMI,里面主要有Win32_NetworkAdapter MSFT_NetAdapter 前面一个已经被微软设为不建议使用了。但,我现在还是用的第一个。

至于WMI 的写法,我这边不写,这个就几个固定格式,很容易看懂,如果不懂的话,可以去度娘看看。

禁止一个Wifi

 public static bool disableWireless()
        {string manage = "SELECT * From Win32_NetworkAdapterConfiguration where IPEnabled=true";//意思是说,如果当前的有IP,那么就是可以使用的网络地址。
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(manage);
            ManagementObjectCollection collection = searcher.Get();
            List<string> netWorkList = new List<string>();
            foreach (ManagementObject obj in collection)
            {
                if (obj["Description"].ToString().ToUpper().Contains("Wireless Network Connection"))
                {
                    obj.InvokeMethod("disable", null);//这边有一个调用disable 这个方法就好了。disable方法不需要我们自己写,可以认为是一个委托吧。
                }
            }
            return true;
        }

当然,很简单,开启也很容易:

 public static bool enableWireless()
        {
            string manage = "SELECT * From Win32_NetworkAdapter Where NetEnabled = false";
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(manage);
            ManagementObjectCollection collection = searcher.Get();
            List<string> netWorkList = new List<string>();
            foreach (ManagementObject obj in collection)
            {
                if (obj["NetConnectionID"].ToString().ToUpper().Contains("AA"))
                {
                    obj.InvokeMethod("Enable", null);
                }
            }

        }

这2段code 都很简单,关键是要理解WMI的用法呢。

优点:使用很方便,只需要查查WMI 中类的参数就好了

缺点:目前这个方法只能使用在WIN 7中,下午改了很久都没能改成在XP 中运行。

2.3 使用微软的COM---shell32.dll

读过我前一篇文章的朋友应该知道,使用VS 自带的dll类库是有问题。我们需要重新下载新的dll文件。如果需要的点击下面的地址:

猛击Shell32.dll 下载地址

核心代码如下:

var shell = (Shell32.IShellDispatch4)new Shell32.ShellClass();//定义
                    Shell32.Folder folder = shell.NameSpace(49);//在控制面板中,获取网络连接这个item

                    foreach (Shell32.FolderItem myItem in folder.Items())//遍历网络连接里的所有项,也就是我们看到网络里面的item,比如本地连接,无线网络连接。
                    {if (myItem.Name.Contains("Wireless Network") || myItem.Name.Contains("无线网络"))//查找相关的网络
                        {
                            foreach (Shell32.FolderItemVerb Fib in myItem.Verbs())
                            {
                                if (Fib.Name == “禁用(&B)”)
                                {
                                    Fib.DoIt();
                                }
                            }
                        }
                    }

上面的myItem.Verbs() 指的是获取所有的网络的状态。比如以下面:

这里有一个小小的bug是,如果这里的的禁用可能根据不同的OS 具有不同的结果,英文版的是 dis&able.所有这里需要小心点。应该还有更智能的方法,但时间太短了,我没有仔细的研究。

优点:适合XP 和Win7系统

缺点:不容易找到。

2.4 使用devcon工具---devcon.exe

注意,这个是无需安装的。因为时间关系,没对这个做太多研究。如果你们喜欢的可以研究一下,这个听说专门是为弥补XP 不能使用netsh来使用的。

猛击下载devcon工具。

使用方法(使用代码控制在后面)

1.cmd 导航到 下载后的页面

2.打开cmd ,输入devcon,如果有下面的devcon usage 那说明就可以开始了。

3.找出所有的本地网卡。

Devcon  findall  *

会列出很多很多的东西,你使用下面的命令进行学习。因为我没做太多的研究对这个,所有有需要的读者 可以自行研究咯。

devcon help

4.程序中使用方法

和第一种方法是一样的,只是第一个参数,你需要些的是devcon的路劲而已。

  string args = "findall *";
            ProcessStartInfo start = new ProcessStartInfo("C:\Documents and Settings\Administrator\Desktop\1.10\TestWifi\i386\devcon.exe", args);
            start.UseShellExecute = false;
            start.CreateNoWindow = true;
            start.Verb = "runas";
            start.RedirectStandardOutput = true;
            Process p = Process.Start(start);

 Ok,这样就能输出,有许多功能你们自己研究咯。

结束语

希望对大家有帮助,欢迎提问。

大家 晚安。


<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
devcon 绿色中文版 DevCon 实用工具是一命令行实用工具,可以替代设备管理器。使用 DevCon,您可以启用禁用、重新启动、更新、删除和查询单个设备或一组设备。DevCon 提供与开发人员有关但无法在设备管理器中看到的信息。   您可以将 DevCon 用于 Windows 2000 、Windows XP和Windows vista。不能将 Devcon 用于 Microsoft Windows 95、Windows 98、或 Windows Millennium Edition。 devcon.exe [-r] [-m:\\] [] -r if specified will reboot machine after command is complete, if needed. 目标机器名字. 命令(见下面). 传给命令的参数. For help on a specific command, type: devcon.exe help classfilter 允许修改class filters. classes 显示设备安装classes. disable 用指定的硬件名称或者instance ID禁用设备 driverfiles 列出设备安装的驱动文件. drivernodes 显示设备的所有节点的驱动. enable 用指定的硬件名称或者instance ID启用设备. find 用指定的硬件名称或者instance ID查找设备. findall 查找所有硬件设备包括不显示的. help 显示帮助信息. hwids 显示设备硬件ID. install 手动安装设备. listclass 显示所有设备的安装 class. reboot 重启本地机器. remove 用指定的硬件名称或者instance ID删除设备. rescan 从新扫描硬件信息. resources 显示设备使用的硬件资源. restart 用指定的硬件名称或者instance ID重启设备. stack 列出设备的驱动堆栈. status 列出设备的状态. update 手动更新设备驱动. updateNI 不显示用户界面的更新设备状态 SetHwID 添加、删除、编辑硬件ID的顺序. 现在看看例子: devcon -m:\\test find pci\* 如果你开启了test机器上的IPC$的话,就可以列出test上所有知道的PCI设备 devcon -r install %WINDIR%\Inf\Netloop.inf *MSLOOP 安装一个新的Microsoft loopback adaptor实例,如果要重启的话,该命令会自动重启 devcon classes 显示所有知道的安装类。包括未认识的设备如: "USB" 和描述名字如:"Universal Serial Bus controllers". devcon classfilter upper !filter1 !filter2 删除两个指定的classfilter . devcon classfilter lower !badfilter +goodfilter 用"goodfilter"替换"badfilter". devcon driverfiles =ports 列出被ports安装类使用的设备驱动文件 devcon disable *MSLOOP 禁用所有硬件ID结尾有"MSLOOP"的设备 devcon drivernodes @ROOT\PCI_HAL\PNP0A03 列出所有 ROOT\PCI_HAL\PNP0A03的兼容驱动.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值