Решение, которое потребует значительного количества программирования, но может быть выполнено:
Напишите отдельную программу, которая перехватывает вывод программы на экран и каким-то образом отправляет ее в вашу программу. Запустите эту программу в скрытом окне, она развернется, запустит приложение и отправит вывод вашей программе.
По крайней мере, части перехватчика почти наверняка должны быть в сборке.
Редактировать: перенаправление stdout не будет делать, даже если программа только пишет в него - он хочет, чтобы вывод выводился.
Есть три вещи, которые, возможно, должны быть перехвачены:
Int 21h пишет в файловую систему. Это те вещи, которые могут быть перехвачены перенаправлением stdout. Помните, что некоторые программы могут писать в другой номер дескриптора, который фактически представляет файл stdout - найдите дескриптор, в который записывается в таблице дескрипторов программы, и сравните его с записью stdout (IIRC вторая запись) - если они совпадают это на самом деле вывод на экран.
Второй уровень IIRC int 10h. Есть несколько дополнительных вызовов, которые должны быть перехвачены.
Наконец, программа может выполнять прямую запись на экран. Перехватывать это было бы основной болью, я бы даже не подумал попробовать ее (вам пришлось бы в основном переписать поле DOS). Вместо этого часто сравнивайте экранную память с сохраненной копией в поисках изменений.
Во всех трех случаях, по крайней мере, части рутины должны быть написаны на ассемблере.
Я сделал первое, немного поиграл со вторым, но потом обнаружил, что могу обойтись без этого. Я никогда не пытался третий.