有時候我們在寫一些小程式的時候,都會利用Console Window(命令模式視窗)來當作主要解決介面。問題是在某些時刻,我們會希望這個視窗能夠在作業系統背景工作,不需要出現一個黑色的視窗在前景干擾我的作業(但又不想寫成Windows Services服務),這時候問題就會變成「如何隱藏這個Console Window」。
其實,隱藏Console Window(命令模式視窗)不外乎下列幾種模式:
這個方法是最簡單的,優點是快速、免寫程式,缺點是如果使用者是透過非Console模式下去執行它(例如在檔案總管中雙擊這隻程式起來執行),那它會因為搞不清楚你是Windows應用程式還是Console程式,於是會出現卡頓一下的問題(但執行起來就好了)。設定畫面如下圖所示:
這個作法是我個人最喜歡用的方式,原因是因為程式碼其實沒幾個字,運行起來很快速。缺點是在Console模式下去執行它,它會因為已經失去視窗介面,而會出現一個游標停在上面,原因是在等候回傳值(一直在背景表示是一個超大的迴圈,因此沒有終點)。這時候其實你已經可以放心的把這個Console Window關掉,因為它已經在背景跑起來了。
以下示範的是一個會在背景一直嗶嗶叫的程式碼:
class Program { [System.Runtime.InteropServices.DllImport("kernel32.dll")] private static extern bool FreeConsole(); static void Main(string[] args) { //將視窗隱藏起來 FreeConsole(); while (true) { Console.Beep(); System.Threading.Thread.Sleep(1000); } } }
這個方法我不是很推薦,因為你必須先創造一個包皮執行檔後,再用這個包皮執行檔去調用另外一個執行檔,這顯得很蠢,程式碼概念簡列在下面,但不多做討論了。(其實網路有流傳一些可以幫忙隱藏視窗的小程式,就是用這個去寫出來的。)
System.Diagnostics.ProcessStartInfo oPI = new System.Diagnostics.ProcessStartInfo(); oPI.FileName = @"你程式的完整路徑+你程式的檔名.exe"; oPI.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;C# HideConsole FreeConsole DisableConsole