通過程序啟用/禁用 網絡連接(提供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,這樣就能輸出,有許多功能你們自己研究咯。

結束語

希望對大家有幫助,歡迎提問。

大家 晚安。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM