Скребок экрана из командного окна с использованием управляемого кода .net

Я пишу программу в точечной сети, которая будет выполнять сценарии и программы командной строки с использованием объекта Process фреймворка 2.0. Я хочу иметь доступ к экранным буферам процесса в моей программе. Я исследовал это и, похоже, мне нужен доступ к консольным буферам stdout и stderr. Кто-нибудь знает, как это достигается с помощью управляемого кода?

Я думаю, мне нужно использовать AttachConsole и ReadConsoleOutput консоли Windows, прикрепленной к задаче, чтобы прочитать блок символьных и атрибутных данных с экрана консоли. Мне нужно для этого управляемый код.

См. http://msdn.microsoft.com/en-us/library/ms684965(VS.85).aspx.


person William Main    schedule 17.09.2008    source источник


Ответы (1)


Это можно сделать с помощью свойств StandardError, StandardOutput и StandardInput в классе System.Diagnostics.Process.

В MSDN есть хороший пример перенаправления стандартного входа и выхода процесса.

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

Также обратите внимание, что для использования StandardInput необходимо установить для ProcessStartInfo.UseShellExecute значение false, а для ProcessStartInfo.RedirectStandardInput - значение true. В противном случае запись в поток StandardInput вызывает исключение.

person Judah Gabriel Himango    schedule 17.09.2008
comment
Спасибо за быстрый ответ. Однако я не хочу читать поток. Я хочу получить доступ к консольному буферу, который отображается в командном окне. Это было бы похоже на очистку экрана на html-странице. - person William Main; 17.09.2008
comment
Я думаю, мне нужно использовать метод AttachConsole консоли, а затем метод ReadConsoleOutput для доступа к прямоугольнику данных символов и атрибутов. Я не знаю, как это сделать в управляемом коде. - person William Main; 17.09.2008