最近我寫了兩個很小小小小的工具程式,一個是用來查網路卡實體位置的,另一個則是用來將筆記型電腦轉換成無線網路分享器或基地台的小程式。
寫這兩個小程式目的是想要簡化一些繁瑣的程序,以那個查網路卡實體位置的小程式為例子,其實是因為我住宿使用的宿網需要綁定位置,而學校寫的實在是太複雜…所以我就想說乾脆寫個小程式送給所有有住宿的同學們,不過下載率有點低就是了。
另一個程式也是同樣為了簡化程序而生的,有天我跟學校借了一台平板電腦,學校購買的只支援WiFi無限連線,雖然學校有還算不錯的無線環境,不過宿舍裡並沒有無線上網的服務可以用,所以我就想「我能不能把我的筆電當作無線網路分享器,然後讓我身上這台平板能夠連上網呢?」然後我就開始Google了。找了好幾個方法,最後找到一個利用微軟內建的命令才成功。
喔,對了。第一個小程式也是利用 Windows 內的固有程式達成目的的,我做的只是將那些打指令的過程跟資訊過濾一下而已。
上面那些程式過幾天我在放上來給大家批評,今天我們就先來看看我是怎麼做到的? 我寫這些程式所使用的語言為 Visual C# 採用 Visual Studio 2010 的版本。
這是 C# Diagnostics 函式庫裡面提供的物件之一,也是今天這篇文章的主角,沒有這個就沒辦法執行我要的功能,但若只有他一個人其實也是沒有辦法執行我想要的功能…因此這時就需要搭配上 Process 這個主角之二,才能正確地運作。
他們倆就像是合作無間的夥伴,平常分開時表現差強人意,而當他們一結合,哇!不得了,什麼都做得出來…(誤)。
那麼, ProcessStartInfo 怎麼使用呢?
在 C# 中,要使用物件就得先要在程式裡面建立出這個物件…
「什麼物件不物件的,你到底在說什麼啊?」某甲發牢騷。
我懂,物件這個概念對於許多人來說是很詭異的,到底什麼是物件呢?
其實,物件是把現實生活中物品或工具之類的概念放進程式裡面,也就是說,在程式裡面所說的物件即是程式設計世界中的工具或物品,而每個物件,即程式世界中的工具或物品都有各自的使用方法以及特性,說到這裡,或許你還是認為不大了解,沒關係,現在你只要知道這裡所說的物件是指程式世界中的工具或物品就好了,關於這部分我日後會有幾篇文章專門探討這個。
回到正題,在 C# 程式中要使用這個玩意就得要先讓它出現在我的或你的程式之中,也就是所謂的 new 一個新的物件,像下面這行程式這樣:
ProcessStartInfo pstart = new ProcessStartInfo("程式名稱"); // 通常是DOS指令+.exe,請參考範例程式
這行程式碼就是在程式裡面創造(new)一個名字叫做 pstart 的 ProcessStartInfo 物件,到這裡就是基本的宣告方式,但這只是命名而已,並沒有真正的動作,因為我們還沒有告訴它我們要它做什麼啊!
等等,我們還忘記一件事情, ProcessStartInfo 使用前我們還要引入跟他有關係的函式庫(Library),這樣程式才能從圖書館(Library)找到相應的物件,然後正確的使用它,使用前請在程式最上方加入:
using System.Diagnostics;
好的,在 MSDN 的說明中,這個物件提供好幾個可以設定的屬性,也就是這個工具或物品的樣貌以及功能的設定,詳細可以點到 MSDN 的說明去參考,而我在設定上面只用到了以下這幾個:
pstart.Arguments = "要給程式的指令"; // 定義指令 pstart.CreateNoWindow = true; // 不顯示執行視窗 pstart.RedirectStandardOutput = true; // 標準輸出啟用 pstart.RedirectStandardInput = true; // 標準輸入啟用 pstart.UseShellExecute = false;
到這裡,我們已經初步的跟名為 pstart 的 ProcessStartInfo 物件說明我們要它做的事情了,接下來就是主要讓它動起來的物件,Process。
這個物件在 MSDN 中的說明是:「提供對本機和遠端處理序 (Process) 的存取,並讓您能夠啟動和停止本機系統處理序。」也就是說,它是一個讓你能夠控制程式的物件(工具),詳細資訊可以參考 MSDN 的說明文件。
我利用了它所提供的Start(ProcessStartInfo)這個方法讓我執行上面那個 ProcessStartInfo 所設定的程式,我的程式碼是這樣寫的:
Process p = Process.Start(pstart);
這樣的寫法等於我在程式裡面創造了一個名字叫做 p 的 Process 物件,順便請他啟動我剛剛用 pstart 設定的那個程式。
OK,基本上我是這樣子去讓我自己寫的程式去執行 DOS 的命令,不過這裡是大略的使用方式介紹,詳細的內容或好奇我怎麼讓程式好好運作的,請直接參考我寫的程式,裡面有近乎完整的註解,希望您能夠從那裡面理解整個程式的運作方式。
【程式名稱】:Mac Catcher
【程式簡介】:查詢實體網路卡位置
【作業系統】:Windows XP / Vista / 7
———————————————————–
【程式名稱】:As A Wireless Adapter
【程式簡介】:將筆記型電腦當作無線網路基地台/分享器
【作業系統】:Windows 7
(以上原始碼使用 Visual Studio 2010 撰寫,採用 .Netframework 3.5 以上架構。)