Запись консольной обертки в C#?

Я пытаюсь записать свою собственную обертку Командной строки как 'Console2' в C#. К сожалению, я не выяснил хороший способ сделать это.

Кто-то может дать мне пример захвата консольного ввода и вывода и направления его в Приложение?

NB я не пытаюсь сделать консольное приложение, я пытаюсь сделать обертку для консоли - приложение форм окон с richtextedit, который действует как консоль и который может обработать IO как Windows Console

6
задан johnc 12 January 2010 в 21:17
поделиться

2 ответа

Вы не можете надежно получить всю консольную вывод из процесса, только перенаправляя его стандартные ручки. Как только он использует необработанные функции ввода / вывода для консоли, они будут работать только с реальной консолью, а не обрабатывается файлами.

Обычно значение по умолчанию, безременным std_input_handle , std_output_handle и std_error_handle - это только псевдо-ручки, как в смысле не быть ручкой, известными для NT ядро для этого процесса. Readfile readfile и apitsfile API apis включают в себя, что проверяет эти псевдо-ручки и перенаправляет вызов ReadConsolea и WriteConsolea подходящее. Однако все консольные API работают только на консоли псевдо-ручки (с именем входных буферов ввода и буферов экрана консоли ) и не удается при прохождении реальной обработки файлов Отказ

Теперь из-за этого перенаправления, и тот факт, что большинство программ используют API файлов при записи или чтении с консоли означает, что он - это , возможно иметь некоторый уровень перенаправления, но с чего вы Хотите сделать это полный консольный эмулятор, это будет недостаточно. Вы не сможете запечатлеть любой из звонков, которые, например, изменяют размер или атрибуты буфера экрана, чтения из него создают альтернативные и т. Д.

Если вы не боитесь на языке сборки и Инженерия, вы можете посмотреть в подключение различных консольных API в целевой процесс (и их дети) или, в случае Windows 7, Reimlementing Conhost.exe .

6
ответ дан 8 December 2019 в 18:37
поделиться
[

] Чтобы получить доступ к потокам StandardInput, StandardOutput и StandardError, необходимо запустить cmd.exe с классом Process и пользовательским классом ProcessStartInfo. [

] [

]Узнайте больше о классе []ProcessStartInfo на MSDN[].[

] [

]Также есть []хороший пример проекта на CodeProject.[].[

] [

]А Console2 - это проект с открытым исходным кодом, так что вы можете взглянуть на его код. Я знаю, что это C++, но вы все еще получаете некоторые идеи, глядя на исходные тексты.[

].
7
ответ дан 8 December 2019 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: