如何爲窗體應用程序顯示控制檯

                     如何爲窗體應用程序顯示控制檯
                               周銀輝


由於某種特殊需求(⊙﹏⊙),需要將窗體應用程序的控制檯輸出顯示出來,其實是爲了顯示Console.Write()信息以便調試哈(VS的output窗口是可以顯示的,但是,實際情況是,脫離了VS的, 遠程調試?forget it!反正是脫離了啦) 

發現,其實win32 是提供了“爲進程分配控制檯”這樣的方法的,這就是:

 

        /// <summary>
        
/// Allocates a new console for the calling process
        
/// </summary>
        
/// <returns>If the function succeeds, return true</returns>
        [DllImport("kernel32")]
        
static extern bool AllocConsole();

 調用該方法的進程的標準輸入流和輸出流都將默認地與這個方法創建的控制檯關聯起來,也就是說調用Console.xxx()方法都將是針對這個控制檯了。

OK,簡單地包裝一下:

public class ConsoleWindow2
    {
        
public static IntPtr CreateConsole()
        {
            var console 
= new ConsoleWindow2();
            
return console.Hwnd;
        }

        
public IntPtr Hwnd { getprivate set; }

        
public ConsoleWindow2()
        {
            Initialize();
        }

        
public void Initialize()
        {
            Hwnd 
= GetConsoleWindow();

            
// Console app
            if (Hwnd != IntPtr.Zero)
            {
                
return;
            }

            
// Windows app
            AllocConsole();
            Hwnd 
= GetConsoleWindow();
        }

        
#region Win32

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

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


        
#endregion
    }

 

試驗一下:

 

如果需要更多的控制,可以參考下面這些和控制檯相關的API:

 

some APIs about console

還是簡單地聲明一下:
博文中的內容可能是一個小技巧,但絕非特定問題的解決方案,所以不要太在意其是否有意義或用途,或許對於不同的人不同的場景有着不同的意義或用途。
還是那句話:僅供參考 :)

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