用語を混同しています。「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