Как вы захватываете консольный ввод / вывод (не stdio) в Windows? - PullRequest
2 голосов
/ 15 сентября 2010

Зачем мне это нужно? Потому что я пишу свою собственную замену cmd.exe! Я могу CreateProcess и передать дескрипторы в каналы для stdin, stdout и stderr, и я вижу, как я могу использовать AllocConsole, FreeConsole и AttachConsole, но как мне сообщить дочерним программам, что моя программа является консолью? 1003 *

Более подробно для уточнения: у меня есть окно, которое может отображать текст и принимать ввод. Я отображаю текст "C:>", например. Пользователь вводит "foo.exe". Я нахожу foo.exe по пути и вызываю CreateProcess для него. Если он пишет в стандартный вывод, я отображаю этот текст на экране. Если он читает из stdin, я передаю все нажатия клавиш, которые нажимал пользователь. Когда процесс завершается, я снова печатаю подсказку. Все идет нормально. Все работает Но затем я пытаюсь запустить foo2.exe, который создает CreateFile для CONOUT $, что не удается, поскольку к процессу не подключена консоль. Что делает cmd.exe, чтобы дети воспринимали его как консоль?

Ответы [ 2 ]

0 голосов
/ 15 сентября 2010

Я не уверен, возможно ли вообще создать полную замену консоли, не вставляя в дочерний процесс и не подключая API консоли и WriteFile.

Замена cmd.exe с другой стороны должна быть возможной, просто убедитесь, что вы действительно создали консольную программу, и вы должны получить консоль, а CreateProcess должен убедиться, что дочерний процесс получает ту же консоль, не мешая с вводом-выводом ручки.

0 голосов
/ 15 сентября 2010

Это то, что вы после?http://msdn.microsoft.com/en-us/library/ms682079%28v=VS.85%29.aspx

Ваш запрос довольно расплывчатый, хотя, думаю, именно поэтому вы еще не получили того, что искали.

...