私は小さなwinmainアプリケーションを持っています。 起動時にコンソールを点滅させたくないので、winmainです。 しかし、それがコンソールから起動された場合、私はこのコンソールで印刷したいと思います。winmainアプリケーションで最終的なlauchingコンソールを使用する方法は?
これは可能ですか?ここ
私は小さなwinmainアプリケーションを持っています。 起動時にコンソールを点滅させたくないので、winmainです。 しかし、それがコンソールから起動された場合、私はこのコンソールで印刷したいと思います。winmainアプリケーションで最終的なlauchingコンソールを使用する方法は?
これは可能ですか?ここ
は私が保持してきたソリューションです:コメントで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");
}
'* stdout'への割り当てはポータブルではないので、C++オブジェクトを使用する新しいUniversal CRTでも動作するとは思いません。 – eryksun
cmd.exeのが唯一のコンソールアプリケーションを待っているので、AttachConsole
は完璧ではありません。
ちょっとした回避策は、.comに名前を変更する小さなコンソールヘルパー.exeを用意することです。あなたと親コンソールアプリケーションの間に位置します。 GUIアプリケーションのコンソールハンドルにアクセスするには、まだAttachConsole
またはDuplicateHandle
を使用する必要があります。
はい、「AttachConsole」経由ですが、 'AllocConsole'で新しいものを割り当てると良いでしょう。おそらくあなたのプログラムを起動したコンソールアプリケーションは、あなたのプロセスが終了するのを待っているとは限りません。そのため、コンソールに接続して印刷すると、テキストをユーザー入力の途中に注入したり、 – eryksun
私はアプリの起動時にのみ印刷します。だから私はこのコンソールが同時に使用されることを心配していません。このコンソールを接続するにはどうすればよいですか?ありがとう。 – renataflow
[AttachConsole(ATTACH_PARENT_PROCESS) '、[documented](https://docs.microsoft.com/en-us/windows/console/attachconsole)です。 – eryksun