利用win服務定時為網卡啟用/禁用


 

上周,Boss和我說,他兒子夜里爬起來用筆記本在被窩里玩CF,問路由器可以解決么,我看了是TPLINK的普通家用無線路由器,不支持禁用CF客戶端網游,可以通過配置端口屏蔽什么的,但是白天又要開啟,想想麻煩。還是寫個win服務,定時禁用網卡和定時啟用網卡。

思路是分為兩步,

1. 要先獲取到無線網卡的ID。

2. 然后定時關閉/啟用這個無線網卡。

 

程序呢,也是分為2部分,

1. 用了winform 去獲取所有網絡適配器信息,看看找到無線網卡,然后記下網卡名。

2. 用win服務去遍歷Win32_NetworkAdapter 的信息,符合網卡的,就InvokeMethod, Disable/Enable 。

 

很簡單,winform程序就遍歷了下Win32_NetworkAdapter,然后2個按鈕來測試是否可以正常關閉 和 開啟無線網卡。

有點需要注意,需要引用System.Management.dll ,using System.Management;

 1 /// <summary>
 2         /// 網卡列表
 3         /// </summary>
 4         public void NetWorkList()
 5         {
 6             string manage = "SELECT * From Win32_NetworkAdapter";
 7             ManagementObjectSearcher searcher = new ManagementObjectSearcher(manage);
 8             ManagementObjectCollection collection = searcher.Get();
 9             List<string> netWorkList = new List<string>();
10             foreach (ManagementObject obj in collection)
11             {
12                 netWorkList.Add(obj["Name"].ToString());
13                 label5.Text += obj["Name"].ToString() + "\r\n";
14             }
15             this.cmbNetWork.DataSource = netWorkList;
16         }
17 
18         /// <summary>
19         /// 網卡狀態
20         /// </summary>
21         /// <param name="netWorkName">網卡名</param>
22         /// <returns></returns>
23         public bool NetWorkState(string netWorkName)
24         {
25             string netState = "SELECT * From Win32_NetworkAdapter";
26             ManagementObjectSearcher searcher = new ManagementObjectSearcher(netState);
27             ManagementObjectCollection collection = searcher.Get();
28             foreach (ManagementObject manage in collection)
29             {
30                 if (manage["Name"].ToString() == netWorkName)
31                 {
32                     return true;
33                 }
34             }
35             return false;
36         }
37 
38         /// <summary>
39         /// 得到指定網卡
40         /// </summary>
41         /// <param name="networkname">網卡名字</param>
42         /// <returns></returns>
43         public ManagementObject NetWork(string networkname)
44         {
45             string netState = "SELECT * From Win32_NetworkAdapter";
46             ManagementObjectSearcher searcher = new ManagementObjectSearcher(netState);
47             ManagementObjectCollection collection = searcher.Get();
48             foreach (ManagementObject manage in collection)
49             { 
50                 if (manage["Name"].ToString() == networkname)
51                 { 
52                     return manage; 
53                 }
54             }
55             return null;
56         }
獲取網卡列表 網卡狀態 得到指定網卡

 

 1    /// <summary>
 2         /// 禁用網卡
 3         /// </summary>5
 4         /// <param name="netWorkName">網卡名</param>
 5         /// <returns></returns>
 6         private static bool DisableNetWork(ManagementObject network)
 7         {
 8             try
 9             {
10                 network.InvokeMethod("Disable", null);
11                 return true;
12             }
13             catch
14             {
15                 return false;
16             }
17         }
18         /// <summary>
19         /// 啟用網卡
20         /// </summary>
21         /// <param name="netWorkName">網卡名</param>
22         /// <returns></returns>
23         private static bool EnableNetWork(ManagementObject network)
24         {
25             try
26             {
27                 network.InvokeMethod("Enable", null);
28                 return true;
29             }
30             catch
31             {
32                 return false;
33             }
34         }
啟用/禁用網卡

 

再來就是 windows服務,代碼其實就是和winform程序一樣,沒啥區別,只是定時注意下,另appconfig 配置節點: 

網卡名稱,禁止時間、啟用時間。

 

 

代碼下載 (控件、方法、判斷空等規則可以無視,這里只是作為測試用的)

 

【版權聲明】轉載請注明出處:  http://www.cnblogs.com/yiayi/p/3526735.html

 


免責聲明!

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



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