Взаимодействие с консольными приложениями в Windows
Подскажите пожалуйста как можно взаимодействовать с консольными приложениями, которые принимают параметры в командной строке (ну это понятно), а как получить данные, которые приложение выводит непосредственно на консоль?:-?
а кто будет получателем? куда их надо перенаправить?
а кто будет получателем? куда их надо перенаправить?
а получателем будет текстовый буффер
а получателем будет текстовый буффер
хм... ну если уже после запуска программы - то есть такая штука как перенаправление вывода:
C:\test\program.exe > file.txt
а если в программе, то вообще не вижу проблемы - переопределяется дескриптор стандартного потока вывода, вывод идет во временный тестовый файл, потом файл обрабатывается и удаляется.
хм... ну если уже после запуска программы - то есть такая штука как перенаправление вывода:
C:\test\program.exe > file.txt
а если в программе, то вообще не вижу проблемы - переопределяется дескриптор стандартного потока вывода, вывод идет во временный тестовый файл, потом файл обрабатывается и удаляется.
Либо глобальную область в памяти разместить и туда писать.
Либо глобальную область в памяти разместить и туда писать.
ИМХО, использование глобальных переменных не есть хороший стиль программирования.
Подскажите пожалуйста как можно взаимодействовать с консольными приложениями, которые принимают параметры в командной строке (ну это понятно), а как получить данные, которые приложение выводит непосредственно на консоль?:-?
Через pipe(по моему) можно полностью перенаправить весь вывод к себе...(куда угодно) и делать с ним что угодно. (если память не подводит, то нужно CreateProcess вызвать соответствующим образом) У меня де-то класс написанный валяется для этих целей (не мой правда, какая-то прога декодер его юзала, я оттуда взял попользоваться). Написано на Delphi. Если надо, обращайся.
Читает в отдельном потоке, при получении из консольного приложения строки, вызывет соответствующее событие.
Да, система использует страничную адресацию для этого, но вот как можно поиметь систему для доступа к страницам другого приложения?..
А вот если у меня есть консольная программа, которая вывод свой делает посредством прямого обращения к памяти [B800:0000], как мне получить ее вывод? Тут никакие пренаправления не работают.
Да, система использует страничную адресацию для этого, но вот как можно поиметь систему для доступа к страницам другого приложения?..
Во людям делать нечего, кроме как видеобуфер разбирать. Лучше используйте сохранение в tmp-файл, как советовал squirl
Во людям делать нечего, кроме как видеобуфер разбирать. Лучше используйте сохранение в tmp-файл, как советовал squirl
:) Это все хорошо, если консольная прога у тебя в исходниках валяется...
:) Это все хорошо, если консольная прога у тебя в исходниках валяется...
Спроси у железячников, они тебе лучше расскажут. (Низкоуровневое программирование)