WIN32: нужна помощь с перенаправлением стандартного вывода в гибридной консоли + приложение с графическим интерфейсом - PullRequest
2 голосов
/ 14 июля 2011

У меня есть приложение C32 Win32, которое запускается как консольное приложение, если оно запускается с аргументами командной строки, но как оконное приложение, если нет аргументов командной строки. Я делаю это, используя этот метод, чтобы создать консоль, используя AllocConsole () и STD_OUTPUT_HANDLE:

http://www.halcyon.com/~ast/dload/guicon.htm

Моя точка входа - wWinMain (Unicode WinMain).

Это почти прекрасно работает. Если я запускаю app.exe param1, я получаю консоль и окно GUI отсутствует. Если я запускаю app.exe без параметров, он запускает графический интерфейс и весело движется вместе без консоли.

Там одна вещь отсутствует.

Если я запускаю app.exe param1> output.txt, вывод stdout не перенаправляется в файл output.txt. Это теряется по пути. Есть ли способ создать гибридное приложение, подобное моему, и при этом сохранить перенаправления командной строки?

Ответы [ 2 ]

2 голосов
/ 14 июля 2011

Попробуйте сначала вызвать AttachConsole , указав ATTACH_PARENT_PROCESS (значение -1) в качестве аргумента.Это перенаправит ваше приложение на консоль, с которой оно было запущено, и, следовательно, позволит > output.txt получать все, что оно выводит.В противном случае выходные данные не перехватываются, потому что используются две разные консоли - та, с которой было запущено ваше приложение, и та, которую он создал.Перенаправление к файлу работает на первом, а ваше приложение выводит на второе.

Редактировать: вышеизложенное верно, если ваше приложение запускается с аргументами из существующей консоли (cmd.exe или около того).Однако это может не всегда иметь место - его можно запускать с аргументами из ярлыка, планировщика задач, другого процесса и т. Д. В этом случае AttachConsole завершится неудачно, и когда это произойдет, вы должны вызвать AllocConsoleкак и раньше.

1 голос
/ 15 июля 2011

Я думаю, что ваша проблема решается с помощью кода в этом моем вопросе: Куда поступает запись в стандартный вывод при запуске из оболочки cygwin, перенаправление отсутствует

(Мой вопрос остранный уголок)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...