常在一些討論區看到有網友會問如何執行其它外部程式,或是開啟瀏覽器時順便指定瀏覽的網址。其實這只要透過 Process 類別就能很輕鬆的辦到了。
筆者這邊就弄一個簡單的範例,可開啟、關閉記事本,開啟 IE 瀏覽器並指定網址及列出目前在系統中執行的程序。我們先快速的拉 4 個 Button(按鈕) 及 1 個 ListBox(清單) 到 Form(表單) 上,大致上排成像這樣
接著就能開始來動作手程式囉:不過為了等一下寫程式時不用打太多字,所以開始寫之前要先匯入 System.Diagnostics 命名空間
1 2 | // 匯入 System.Diagnostics using System.Diagnostics; |
沒問題之後就先來寫用來開啟記事本的 button1:
1 2 3 4 5 6 | private void button1_Click(object sender, EventArgs e) { Process notePad = new Process(); // FileName 是要執行的檔案 notePad.StartInfo.FileName = "notepad.exe"; notePad.Start(); } |
如果要執行其它程式的話,只要替換掉 FileName 的屬性值就可以了,但最好是連同檔案路徑一起都指定。最後只要使用 Start() 就可以執行外部程式了。
看過執行外部程式之後,現在再來看如何控制(關閉)外部程式,這動作是由 button2 來做的:
1 2 3 4 5 6 7 8 9 10 | private void button2_Click(object sender, EventArgs e) { // 先取得要控制的處理程序名稱 Process[] processes = Process.GetProcessesByName("NotePad"); foreach(Process p in processes) { // 關閉目前程序前先等待 1000 毫秒 p.WaitForExit(1000); p.CloseMainWindow(); } } |
只要按下 button2 之後,所有開啟中的記事本就會一一的被關閉囉。而 WaitForExit(1000) 則是在關閉前先等待 1 秒。看到這邊是不是對基本的執行外部程式及關閉外部程式已經有點概念了呢!接著就讓我們繼續做下去吧~~
這邊要讓 button3 按下時能開啟 IE 瀏覽器,並指定網址:
1 2 3 4 5 6 7 8 | private void button3_Click(object sender, EventArgs e) { Process explorer = new Process(); explorer.StartInfo.FileName = "explorer.exe"; //explorer.StartInfo.FileName = @"C:\Program Files\Mozilla Firefox\firefox.exe"; // 額外的參數;這邊給的是網址 explorer.StartInfo.Arguments = "http://abgne.tw"; explorer.Start(); } |
除了指定要執行的 FileName 之外,我們還可以透過 Arguments 來給其它的參數值,以一般的瀏覽器來說,這參數代表的通常都是網址。梅干所提供的AllBrowserViewer 程式 就是利用上面的方法來開啟多個指定的瀏覽器唷!
最後我們再來寫一個能把目前在系統中執行的程序列出來的 button4:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | private void button4_Click(object sender, EventArgs e) { listBox1.Items.Clear(); // 列出系統中所有的程序 Process[] processes = Process.GetProcesses(); foreach(Process p in processes) { // 因為使用 Idle 的 StartTime 會造成錯誤,因此先排除 if(!p.ProcessName.Equals("Idle")) { // 顯示程序的名稱及啟動時間 listBox1.Items.Add(string.Format("{0} - {1}", p.ProcessName, p.StartTime.ToString("yyyy/MM/dd hh:mm:ss"))); } } } |
完成後讓我們來看一下顯示出了那些程序:
如果再加上一些 API 來搭配使用的話,這樣就能做出屬於自己的視窗控制(隱藏)程式了。另外,在使用也要注意要執行的外部程式是否存在等問題,否則也是會引起錯誤(Exception)的。
您好,請問有辦法讓程式讀取journal檔或是儲存檔案的動作嗎?謝謝
這沒試過耶, 不過如果想要控制其它程式的話, 還需要用到其它 API 才行
你好,用您的方法,可以做到打開記事本,但是打開後就無法關閉
按下 button2 之後,完全沒有反應,不知道如何解決,求解! 感謝~