[开发手记] 使用.NET实现你的IP切换器
發布日期:2007.4.17 作者:Anytao
?2007 Anytao.com 轉貼請注明出處,留此信息。
?下載:[Anytao.IPHelper][代碼下載,近期上傳]??
本文將介紹以下內容:
? 批處理文件應用
? 調用外部應用
? 文件處理
1. 引言
經常在公司、客戶和家里奔波,切換IP是天天要做的事情,所以有心開發一個小的應用程序,來實現IP地址的快捷切換。既然有了思路就著手來做,我首先想到的是應用netsh.exe工具來實現,所以配置一個批處理文件來實現netsh.exe命令的執行,然后使用.NET框架來調用bat文件即可大功告成。話已至此,馬上行動。
2. 基本原理
根據上述解決思路,我的小系統,定名為《Anytao.IpHelper》的解決方案如下:
- 以批處理文件加載netsh.exe命令,實現IP加載;
- 以.NET的Process方法,實現對外部應用的調用;
- 附帶進度控制和文件檢索功能。
因此,有必要對系統運行的原理進行簡單的梳理,來龍去脈,揭開本質。
2.1. netsh工具簡介
長篇大論的netsh命令介紹,在此就不特別介紹了,百度上隨便就可以找到更加詳細的netsh命令手冊,可以耗你一天的功夫來研究,本文既然著眼于應用,就從實際的招式來闡述,詳細的武功秘籍留待看官量身定做,此處只提供參考:netsh命令詳解、netsh命令使用。
在本文中,請參考以下步驟來實現你的netsh命令處理器:
@echo?off
netsh?interface?ip?set?address?本地連接?static?172.1.1.226?255.0.0.0?172.30.7.254?1?
netsh?interface?ip?set?dns?本地連接?static?200.121.5.1?
echo?www.anytao.com
Echo?Congratulations,?done.
pause
?注意:按照以上格式輸入您的IP、子網掩碼、默認網關和DNS服務器地址;如果是英文版操作系統,將“本地連接”改為“local Area?Connection ”。
另存該文本為批處理文件,在此另存為:home.bat。
點擊該批處理文件,即可將您的IP更新為上述值。
2.2. Process方法簡介
Process方法,位于System.Diagnostics命名空間。MSDN的定義為:Process 組件提供對正在計算機上運行的進程的訪問。對于啟動、停止、控制和監視應用程序等任務,Process 組件是很有用的工具。使用 Process 組件,可以獲取正在運行的進程的列表,或者可以啟動新的進程。Process 組件用于訪問系統進程。初始化 Process 組件后,可使用該組件來獲取有關當前運行的進程的信息。此類信息包括線程集、加載的模塊(.dll 和 .exe 文件)和性能信息(如進程當前使用的內存量)。因此,以Process方法來打開外部批處理文件是托管環境下值得推薦的方法。
當然,以Process方法來打開外部程序,并不是唯一的辦法,最簡單的莫過于調用WinAPI程序來實現,當然這又牽扯到非托管代碼的范疇,我們就不再多羅嗦了。
我的另一篇拙作《在WinForm應用程序中打開Url》中,也有相關的論述,具體的實現見代碼部分的分析。?
2.3. 基本的系統結構如下:
?
3. 實現方法:
?3.1 創建Windows Form 應用程序,設置程序名稱為Anytao.IPHelper,并向窗體文件中拖入一個ComboBox和一個按鈕控件,分別命名為:cbbIP和btnIPConfig,如下圖所示:
?
3.2 雙擊btnIpConfig按鈕,實現其Click事件,如下,具體代碼見注釋:
????????{
????????????try
????????????{
????????????????//使用Process方法加載外部應用
????????????????Process?myProcess?=?new?Process();
????????????????myProcess.StartInfo.FileName?=?Application.StartupPath?+?@"\config\"?+?cbbIP.SelectedItem.ToString()?+?".bat";
????????????????MessageBox.Show(myProcess.StartInfo.FileName);
????????????????myProcess.StartInfo.UseShellExecute?=?false;
????????????????myProcess.StartInfo.RedirectStandardOutput?=?true;
????????????????myProcess.Start();
????????????????myProcess.WaitForExit();
????????????}
????????????catch?(FileNotFoundException?ex)
????????????{
????????????????MessageBox.Show(ex.Message);
????????????}
????????????catch?(Exception?ex)
????????????{
????????????????MessageBox.Show(ex.Message);
????????????}
????????}
3.3 當然我們還要實現程序加載時的獲取文件目錄的操作,如下:
????????private?void?frmMain_Load(object?sender,?EventArgs?e)????????{
????????????//將配置文件加載到下拉框中
????????????string?path?=?Application.StartupPath?+?@"\config\";
????????????if?(Directory.Exists(path))
????????????{
????????????????DirectoryInfo?dirinfo?=?new?DirectoryInfo(path);
????????????????foreach?(FileInfo?fi?in?dirinfo.GetFiles())
????????????????{
????????????????????cbbIP.Items.Add(Path.GetFileNameWithoutExtension(fi.FullName));
????????????????}
????????????}?????????????????????
????????}
?3.4 當然,按照上述方法,將配置好的netsh.exe批處理文件,放在目標位置后,你就可以實現自己的IpHelper了。
3.5 恭喜你,簡單的IPHelper已經實現,運行你的程序,享受快速配置IP帶來的便捷吧。
?
4. 系統展望
?Anytao.IpHelper,只是點燃了一個快速應用的火苗,我在平時的工作中也享受了這種方便的痛快,我的Emma的機子里也必備了IpHelper,就好像是我每天帶給她的愛護和關心。嘿嘿,寫代碼的也可以用這種方式,哄哄家里的娘子軍嘛,讓我們的程序人生更加和諧。
言歸正傳,IpHelper只是個代步的工具,還有更多的思想和設計可以融會到里面做為充實,我將會再以后的時間逐漸完善以下幾個方面:
- 設計Ip、IpConfig類,來以面向對象方式完善系統架構;
- 增加Ip錄入功能,實現動態增加Ip選項的能力,而不需要手工實現;
- 更多桌面網絡管理平臺融合。
5. 結語后下載
本文的主要目的是,以一個示例為切入點,講明白如何在托管環境中以Process方法來加載外部應用,使用Process可以方便的在你的應用中打開網站、郵件、外部程序、腳本等,因此是值得學習的東西。
因為,以開發為基礎的文章是第一次嘗試,不知請大家見笑,小小工具希望給您的生活帶來方便。
代碼部分還要部分完善,今日先提供程序部分,代碼部分我將于近日盡快上傳,請大家見諒,希望這個小工具能給你帶來方便。
下載:[Anytao.IPHelper][代碼下載,近期上傳]
?
?2007 Anytao.com 轉貼請注明出處,留此信息。
本貼子以“現狀”提供且沒有任何擔保,同時也沒有授予任何權利。
This posting is provided "AS IS" with no warranties, and confers no rights.
轉載于:https://www.cnblogs.com/anytao/archive/2007/04/17/anytao_dev_01.html
總結
以上是生活随笔為你收集整理的[开发手记] 使用.NET实现你的IP切换器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 繁体机文本转换
- 下一篇: VS 2005 安装一个的小问题