Может ли вывод консоли консольного приложения Windows быть полностью перехвачен (включая сложные манипуляции)?
Это тривиальный вопрос перенаправления стандартного ввода / вывода консольной программы, но что если программа использует расширенные консольные функции? Как вывод цветного текста, перемещение курсора и непосредственное управление буфером консоли? Можно ли это также перехватить и перенаправить в мою собственную программу для обработки?
Примечание: я говорю о сценарии, в котором мое приложение (не обязательно консольное приложение) запускает консольное приложение и перенаправляет его ввод / вывод к себе.
Примечание 2: В конце я захочу код на C#, а пока давайте придерживаться голого Win32 API и C или C++. Я не думаю, что это будет возможно без PInvoke, так что давайте сначала разберемся с базовым принципом (если это вообще возможно).
1 ответ
В отличие от Linux, весь цветной ввод-вывод не собирается захватываться простым перенаправлением, поэтому единственный способ захватить его - это перехватывать вызовы WinAPI (т. Е. Вам нужно будет перехватывать системные вызовы), которые требуют административных привилегий, хрупких и подозрительных.