Как получить текст консольного окна?
Как мне его получить, если я немогу использовать CreatePipe поскольку консоль управляется пользователем посредством команд.
Сразу предупреждаю, что знания мои неглубоки. Видимые с моей точки зрения решения:
1. перехватить сообщение закрытия окна консольного приложения
2. регулярно читать содержимое окна по имеющемуся дескриптору процесса
Есть ли в этом здравый смысл?
Если нет, то как мне лучше поступить?
Если есть, то как это сделать?
Спасибо
Моя программа запускает чужое консольное приложение через CreateProcess и ждет когда оно закончится, регулярно обрабатывая свои события. Когда консольное приложение завершается, оно закрывается, унося с собой результат работы (который был в окне в текстовом виде).
Как мне его получить, если я немогу использовать CreatePipe поскольку консоль управляется пользователем посредством команд.
Сразу предупреждаю, что знания мои неглубоки. Видимые с моей точки зрения решения:
1. перехватить сообщение закрытия окна консольного приложения
2. регулярно читать содержимое окна по имеющемуся дескриптору процесса
Есть ли в этом здравый смысл?
Если нет, то как мне лучше поступить?
Если есть, то как это сделать?
Спасибо
1. гм. И Что это тебе даст. Заблокировать разрущение на время достаточное для прочтения памяти процесса не получиться.
2. Ближе к истине.
Тебе надо создавать дочерний процесс перенаправляя его вывод в PIPE а оттуда уже забирать вывод когда он нужен. Как это сделать? На RSDN.ru есть статья,
называеться по моему "INETD под windows" не епомню точно, там все расжевано. Удачи!!!
... я немогу использовать CreatePipe поскольку консоль управляется пользователем посредством команд.
То есть команд много и пользователь их вводит в зависимости от того, что ему надо. За это отвечает входной поток. Если я перенаправлю вывод, то приложение станет неуправляемым.
Плюс приложение выводит иногда и графику через старенький dos4gw.exe.
Так что единственный выход - это определить адрес буфера средствами WinAPI и периодически читать из него состояние экрана. Вопрос в том, как это сделать?