2012-06-07 3 views
1

Ситуация в том, что программа была запущена через system() или CreateProcess().Можно ли перехватить вызовы на консоль из другого процесса?

Теперь, возможно ли это сделать, поскольку эта программа выводит данные в консоль. Я имею в виду, как программа выводит его. Это не ждет конца, собирает данные и затем обрабатывает их, но только в тот момент, когда эта внешняя программа вызывает консоль с данными, которые она хочет распечатать, а затем получить данные, обработать их и вывести что-то еще на консоль.

+1

Да, по крайней мере, для вещей, использующих ручки STDOUT или STDERR. Вы хотите посмотреть направление вывода. –

ответ

0

В Linux, создать именованный канал:

system("mkfifo pipename") 

Затем открыть трубу в первой программе, и запустить программу:

system("program > pipename") 

Я не знаю, как это сделать в Windows.

1

Самый простой способ - это запустить программу с _popen(your_program, "r");. Это вернет FILE *, из которого вы можете прочитать, и то, что он читает, будет тем, что ребенок записывает на свой стандартный вывод. Когда вы читаете EOF в этом файле, это означает, что дочерний процесс завершен. Это позволяет легко читать и обрабатывать выходные данные от ребенка в реальном времени.

0

Вызовите AllocConsole перед созданием дочернего процесса или используйте функцию AttachConsole (ChildPID) (в родительском процессе). После этого вы можете использовать любые функции ReadConsoleXXX или WriteConsoleXXX.