2017-11-07 12 views
1

私は小さなwinmainアプリケーションを持っています。 起動時にコンソールを点滅させたくないので、winmainです。 しかし、それがコンソールから起動された場合、私はこのコンソールで印刷したいと思います。winmainアプリケーションで最終的なlauchingコンソールを使用する方法は?

これは可能ですか?ここ

+1

はい、「AttachConsole」経由ですが、 'AllocConsole'で新しいものを割り当てると良いでしょう。おそらくあなたのプログラムを起動したコンソールアプリケーションは、あなたのプロセスが終了するのを待っているとは限りません。そのため、コンソールに接続して印刷すると、テキストをユーザー入力の途中に注入したり、 – eryksun

+0

私はアプリの起動時にのみ印刷します。だから私はこのコンソールが同時に使用されることを心配していません。このコンソールを接続するにはどうすればよいですか?ありがとう。 – renataflow

+1

[AttachConsole(ATTACH_PARENT_PROCESS) '、[documented](https://docs.microsoft.com/en-us/windows/console/attachconsole)です。 – eryksun

答えて

1

は私が保持してきたソリューションです:コメントでeryksunで述べたように

if (AttachConsole(ATTACH_PARENT_PROCESS)) 
{ 
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); 
    int fd = _open_osfhandle((intptr_t)hStdOut, _O_TEXT); 
    if (fd > 0) *stdout = *_fdopen(fd, "w"); 
} 
+2

'* stdout'への割り当てはポータブルではないので、C++オブジェクトを使用する新しいUniversal CRTでも動作するとは思いません。 – eryksun

1

cmd.exeのが唯一のコンソールアプリケーションを待っているので、AttachConsoleは完璧ではありません。

ちょっとした回避策は、.comに名前を変更する小さなコンソールヘルパー.exeを用意することです。あなたと親コンソールアプリケーションの間に位置します。 GUIアプリケーションのコンソールハンドルにアクセスするには、まだAttachConsoleまたはDuplicateHandleを使用する必要があります。

関連する問題