你混淆了條件。 「Windows控制檯」不是「cmd.exe」,而是特殊的「服務」,例如使用「conhost.exe」實現Win7。
當您啓動任何控制檯應用程序(沒關係CMD,PowerShell或您自己的應用程序)窗口啓動時,它在特殊的環境中,可能有明顯的控制檯窗口。但它始終是內部Windows控制檯。
但是!控制檯模擬器可以抓住這個窗口,隱藏真實的控制檯並顯示他們自己的模擬表面。 例如,您可以使用特殊開關啓動ConEmu(在SU上描述,在評論中鏈接)及其完成。
默認終端更換
ConEmu有一個名爲Default Terminal
特徵。如果啓用此功能,您將可以在ConEmu終端的Visual Studio中無縫啓動您的應用程序。這個想法是在源應用程序中掛鉤CreateProcess(explorer.exe
,vcexpress.exe
等等,在設置中用|
對它們進行分隔)。詳細瞭解project wiki中的該功能。
您可以選擇使用現有的ConEmu實例或爲您的應用程序運行新窗口。 ConEmu會在您的應用程序退出後(Always
收音機)在控制檯上顯示Press Enter or Esc to close console...
消息。無需在程序結束時添加readline
以查看輸出。
改變你的應用程序代碼
因爲這是你自己的程序,您可以添加,例如,以下行頭你main
功能
C++例子
#ifdef _DEBUG
if (IsDebuggerPresent())
{
STARTUPINFO si = {sizeof(si)}; PROCESS_INFORMATION pi = {};
if (CreateProcess(NULL,
_T("\"C:\\Program Files\\ConEmu\\ConEmu\\ConEmuC.exe\" /AUTOATTACH"),
NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi))
{ CloseHandle(pi.hProcess); CloseHandle(pi.hThread); }
}
#endif
C#示例
#if DEBUG
ProcessStartInfo pi = new ProcessStartInfo(@"C:\Program Files\ConEmu\ConEmu\ConEmuC.exe", "/AUTOATTACH");
pi.CreateNoWindow = false;
pi.UseShellExecute = false;
Console.WriteLine("Press Enter after attach succeeded");
Process.Start(pi);
Console.ReadLine();
#endif
上的超級用戶類似Q http://superuser.com/q/445394/139371 – Maximus
下面做工精細的答案給出的方法,但是,我希望Visual Studio中已經內置支持選擇第三方控制檯模擬器顯示所有控制檯應用程序輸出。 (仍然不知道,如果我在這裏得到我的術語,@Maximus!:-)) –
是的,ConEmu ... – Anubis