你混淆了条款。“Windows 控制台”不是“cmd.exe”,而是特殊的“服务”,例如 Win7 中的“conhost.exe”。
当您启动任何控制台应用程序(无论是 cmd、powershell 还是您自己的应用程序)时,窗口都会在特殊环境中启动它,该环境可能具有可见的控制台窗口。但它始终是内部 Windows 控制台。
但!控制台模拟器可能会抓住这个窗口,隐藏真正的控制台并显示他们自己的模拟表面。例如,您可以使用特殊开关启动 ConEmu(在 SU 中描述,评论中的链接)并完成。
默认终端更换
ConEmu 有一个名为Default Terminal
. 如果启用此功能,您将在 ConEmu 终端中从 Visual Studio 无缝启动您的应用程序。这个想法是在源应用程序中挂钩 CreateProcess(explorer.exe
等等vcexpress.exe
,在设置中用它们分隔|
)。在项目 wiki中阅读有关该功能的更多信息。
您可以选择使用现有的 ConEmu 实例或为您的应用程序运行新窗口。ConEmu 可以Press Enter or Esc to close console...
在您的应用程序退出(Always
收音机)后在控制台上显示消息。无需再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