C# 當前進程是否有控制檯窗口

WPF應用程序,在VS的項目屬性中,可以設置輸出類型:

那我們在代碼中,如何判斷應用的類型呢。有沒有控制檯?是否Windows應用程序還是控制檯應用程序?

Kernel32下函數GetConsoleWindow可以解決這個問題:

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

1     var consoleWindowHandle = GetConsoleWindow();
2     if (consoleWindowHandle == IntPtr.Zero)
3     {
4         Debug.WriteLine("輸出類型爲 Windows應用程序");
5     }
6     else
7     {
8         Debug.WriteLine("輸出類型爲 控制檯應用程序");
9     }

另外,如果需要判斷控制檯應用程序內,主窗口是否爲控制檯,可以根據窗口句柄來確認:

 1     var consoleWindowHandle = GetConsoleWindow();
 2     var mainWindowHandle = Process.GetCurrentProcess().MainWindowHandle;
 3 
 4     if (consoleWindowHandle == IntPtr.Zero)
 5     {
 6         Debug.WriteLine("輸出類型爲 Windows應用程序");
 7     }
 8     else if (consoleWindowHandle == mainWindowHandle)
 9     {
10         Debug.WriteLine("輸出類型爲 控制檯應用程序,主窗口也是控制檯窗口");
11     }
12     else
13     {
14         Debug.WriteLine("輸出類型爲 控制檯應用程序,但主窗口爲Windows窗口");
15     }

我們設置輸出類型爲控制檯應用,並在ShowMainWindow前後,輸出結果,驗證okay:

注:這裏輸出到VS控制檯,是因爲使用了Debug類型。如果是Console.Write,程序會優先輸出到控制檯窗口內。

 

如果需要在Windows應用程序下,使用控制檯窗口輸出日誌。可以使用AllocConsole:

    [DllImport("kernel32.dll")]
    static extern bool AllocConsole();

AllocConsole,可以創建控制檯窗口。bool返回值,true表示之前沒有控制檯窗口、創建成功,false表示已經有控制檯窗口、創建失敗。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章