2014-05-01 65 views
2

我有一個C#控制檯應用程序項目,其輸出類型設置爲「Windows應用程序」。這是因爲控制檯在程序開始時不閃光。如何使用Windows應用程序輸出類型在C#程序上顯示控制檯

但是我也想允許一個幫助命令行參數,它將顯示有關程序的詳細信息,如果您從命令行以「/?」運行它的話。作爲論據。

有沒有辦法讓程序正常運行爲Windows應用程序,但如果幫助參數被傳遞,則顯示控制檯?

編輯 -閱讀的答案,在This question一個類似(這個問題假設你用一個控制檯應用程序輸出型運行),我使用的這個解決方案之後。

[DllImport(Kernel32_DllName)] 
    private static extern bool AllocConsole(); 

    [DllImport("kernel32.dll")] 
    static extern IntPtr GetConsoleWindow(); 

    [DllImport("user32.dll")] 
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

    const int SW_HIDE = 0; 
    const int SW_SHOW = 5; 

    static void Main(string[] args) 
    { 

     if(args.Contains("/?")) 
     { 
      AllocConsole(); 

      Console.WriteLine("helpText"); 
      Console.ReadLine(); 


      var handle = GetConsoleWindow(); 

      //Hides console 
      ShowWindow(handle, SW_HIDE); 
     } 
} 
+0

可能的重複[如何在Winforms中包含控制檯?](http://stackoverflow.com/questions/3917202/how-do-i-include-a-console-in-winforms) –

回答

2

我還沒有找到一種完全按照你的要求來做的方法,但是你可以根據輸入來打開一個控制檯。例如:

class Program 
{ 
    private const string Kernel32_DllName = "kernel32.dll"; 

    [DllImport(Kernel32_DllName)] 
    private static extern bool AllocConsole(); 
    static void Main(string[] args) 
    { 

     if (args[0] == "/") 
     { 
      AllocConsole(); 


      Console.WriteLine("Details"); 
      Console.ReadKey(); 
      //cases and such for your menu options 
     } 

,將打開,如果你跟着跑命令與/即使項目的輸出類型是Windows應用程序,你可以使用一個控制檯。

1

有沒有辦法有運行作爲Windows應用程序正常,但顯示控制檯如果幫助參數傳遞的程序?

你想要的東西,瞭解如何使用命令行參數here。 基本上聲明主要接受參數作爲字符串的數組:

static void Main(string[] args) 

使用簡單的對話形式來顯示所述幫助信息或甚至一個MessageBox這是一個非常簡單的對話形式。

這給了你更好的控制,而不是試圖拼湊一些並不真正要放在一起的東西。

0

當我需要做這樣的事情時,我通常會讓我的應用成爲控制檯應用。然後我解析args(如果有),並決定是否要隱藏控制檯窗口並啓動我的UI或寫入控制檯。

隱藏窗口非常簡單。舉例來說,請參見How to hide/unhide a process in C#?

相關問題