На самом деле в оболочке уже возвращено приглашение до того, как ваш цветной текст будет напечатан. Вы знаете, что из-за того, что оболочка печатает подсказку . Он бы этого не сделал, если бы все еще ждал, пока ваша программа завершит работу. Докажите это себе, набрав в командной строке больше команд и заметив, что оболочка запускает их для вас.
Когда вы вызываете WinExec
, вы запускаете программу асинхронно . Эта функция не ожидает завершения команды echo
, пока не вернет управление вашей программе, и ваша программа также не ожидает завершения выполнения команды. Поскольку оболочка ожидает только вашу программу, а не любые другие программы, которые ваша программа могла запустить, оболочка печатает свое приглашение, как только ваша программа завершает работу, что, очевидно, происходит раньше команде echo
удается распечатать любой вывод.
Чтобы это исправить, вам нужно дождаться завершения команды echo
, прежде чем вы позволите завершить свою собственную программу. WinExec
не все, что вам делать, хотя. Это так же хорошо, так как он устарел около 17 лет. Вместо этого используйте CreateProcess
. Он вернет дескриптор процесса, и вы можете передать этот дескриптор процесса в WaitForSingleObject
, который будет блокироваться до завершения процесса.