上周,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
