Has mezclar hasta términos. La "Consola de Windows" no es un "cmd.exe", sino un "servicio" especial que se implementó, por ejemplo de Win7, con "conhost.exe".
Al iniciar cualquier aplicación de consola (no importa cmd, powershell o su propia aplicación) Windows la inicia en un entorno especial, que puede tener una ventana de consola visible. Pero siempre es una consola interna de Windows.
¡Pero! Los emuladores de consola pueden tomar esta ventana, ocultar una consola real y mostrar su propia superficie emulada. Por ejemplo, puede iniciar ConEmu con modificadores especiales (descritos en SU, enlace en comentario) y listo.
reemplazo de terminal por defecto
ConEmu tiene una característica denominada Default Terminal
. Si habilita esta función obtendrá una aplicación sin problemas desde Visual Studio en la terminal ConEmu. La idea es conectar CreateProcess en la aplicación de origen (explorer.exe
, vcexpress.exe
y así sucesivamente, delimítelos con |
en la configuración). Lea más sobre esa función en el project wiki.
Puede optar por utilizar una instancia existente de ConEmu o ejecutar una nueva ventana para su aplicación. Y ConEmu puede mostrar el mensaje Press Enter or Esc to close console...
en la consola después de que se cierre la aplicación (la radio Always
). Ya no es necesario agregar readline
al final de su programa para ver la salida.
Cambio de código de aplicación
Debido a que es su propio programa, es posible añadir, por ejemplo, las siguientes líneas a la cabeza de su función main
C++ ejemplo
#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
ejemplo de 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 similares en superusuario http://superuser.com/q/445394/139371 – Maximus
Los métodos dados en respuesta a continuación funcionan bien, sin embargo, deseo Visual Studio se había incorporado en el apoyo a la elección de una tercera parte de la consola Emulador para mostrar toda la salida de la aplicación de consola. (Todavía no estoy seguro si estoy obteniendo mi terminología aquí, @Maximus! :-)) –
sí, ConEmu ... – Anubis