Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как получить текст консольного окна?

7.6K
28 ноября 2005 года
jack_pack
6 / / 19.08.2004
Моя программа запускает чужое консольное приложение через CreateProcess и ждет когда оно закончится, регулярно обрабатывая свои события. Когда консольное приложение завершается, оно закрывается, унося с собой результат работы (который был в окне в текстовом виде).

Как мне его получить, если я немогу использовать CreatePipe поскольку консоль управляется пользователем посредством команд.

Сразу предупреждаю, что знания мои неглубоки. Видимые с моей точки зрения решения:
1. перехватить сообщение закрытия окна консольного приложения
2. регулярно читать содержимое окна по имеющемуся дескриптору процесса

Есть ли в этом здравый смысл?
Если нет, то как мне лучше поступить?
Если есть, то как это сделать?

Спасибо
9.7K
29 ноября 2005 года
DaemonDZK
59 / / 08.11.2005
Цитата:
Originally posted by jack_pack
Моя программа запускает чужое консольное приложение через CreateProcess и ждет когда оно закончится, регулярно обрабатывая свои события. Когда консольное приложение завершается, оно закрывается, унося с собой результат работы (который был в окне в текстовом виде).

Как мне его получить, если я немогу использовать CreatePipe поскольку консоль управляется пользователем посредством команд.

Сразу предупреждаю, что знания мои неглубоки. Видимые с моей точки зрения решения:
1. перехватить сообщение закрытия окна консольного приложения
2. регулярно читать содержимое окна по имеющемуся дескриптору процесса

Есть ли в этом здравый смысл?
Если нет, то как мне лучше поступить?
Если есть, то как это сделать?

Спасибо



1. гм. И Что это тебе даст. Заблокировать разрущение на время достаточное для прочтения памяти процесса не получиться.
2. Ближе к истине.

Тебе надо создавать дочерний процесс перенаправляя его вывод в PIPE а оттуда уже забирать вывод когда он нужен. Как это сделать? На RSDN.ru есть статья,
называеться по моему "INETD под windows" не епомню точно, там все расжевано. Удачи!!!

7.6K
29 ноября 2005 года
jack_pack
6 / / 19.08.2004
Цитата:
Originally posted by jack_pack
... я немогу использовать CreatePipe поскольку консоль управляется пользователем посредством команд.


То есть команд много и пользователь их вводит в зависимости от того, что ему надо. За это отвечает входной поток. Если я перенаправлю вывод, то приложение станет неуправляемым.
Плюс приложение выводит иногда и графику через старенький dos4gw.exe.

Так что единственный выход - это определить адрес буфера средствами WinAPI и периодически читать из него состояние экрана. Вопрос в том, как это сделать?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог