您混淆了术语。“Windows Console”不是“cmd.exe”,而是一种特殊的“服务”,例如在Win7中使用“conhost.exe”实现。
当您启动任何控制台应用程序(无论是cmd、powershell还是您自己的应用程序),Windows都会在特殊环境中启动它,该环境可能具有可见的控制台窗口。但它始终是内部的Windows控制台。
但是!控制台模拟器可以抓取此窗口,隐藏真正的控制台并显示其自己的模拟表面。例如,您可以使用特殊开关(在评论中描述)启动ConEmu,然后完成操作。
默认终端替换
ConEmu具有名为“默认终端”的功能。如果您启用此功能,则可以在ConEmu终端中无缝启动来自Visual Studio的应用程序。其思想是钩住源应用程序(explorer.exe、vcexpress.exe等,在设置中用|分隔)。请在
project wiki中阅读有关该功能的更多信息。
您可以选择使用现有的ConEmu实例或为您的应用程序运行新窗口。并且在您的应用程序退出后,ConEmu可以在控制台上显示“按Enter或Esc关闭控制台…”消息(“始终”单选按钮)。不需要再在程序末尾添加
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