Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чтение с консоли [D7, WinXP]


Steplerr ©   (2006-05-29 16:01:00) 

Три дня уже бъюсь над такой делемой - как из своей программы прочитать текст выведенный на консоль ДРУГОЙ КОНСОЛЬНОЙ программы.
Максимум, чего удалось добиться - получить хэндлер (ConsoleWindowClass) и через SendMessage (и WM_SETTEXT) вывести в его заголовок текст, а как считать то текст с самой консоли!!!
Помогите плиз!!!

З.Ы. Вариант типа proga.exe > file.txt - не подойдёт!!!


vertal   (2006-05-30 22:35:00) [1]

http://kladovka.net.ru/index.cgi?pid=board&rid=30


Leonid Troyanovsky   (2006-05-30 19:49:00) [2]


> Юрий Зотов ©   (30.05.06 18:20) [11]

> Можно, я делал. Насколько помню, там в StartupInfo есть
> флаг соответствующий, в


Скорее всего, делал ты это обычным способом - через пайп,
который чужим процессом наследуется.
Потому, как наследованию хендлов самой консоли препятствует MS:

Console input The handle is returned by the CreateFile function when CONIN$ is specified, or by the GetStdHandle function when STD_INPUT_HANDLE is specified. Console handles can be duplicated for use only in the same process.

Console screen buffer The handle is returned by the CreateFile function when CONOUT$ is specified, or by the GetStdHandle function when STD_OUTPUT_HANDLE is specified. Console handles can be duplicated for use only in the same process.

В [8] я имел ввиду несколько другое.
Когда чужой процесс запускается в своей консоли появляются
некоторые дополнительные возможности с ним взаимодействовать.
Т.е., чужой процесс даже может поверить, что это не подсунутый ему
пайп, а настоящая консоль (при переопределении стандартных ввд/выв).

--
Regards, LVT.


Юрий Зотов   (2006-05-30 18:20:00) [3]

> Leonid Troyanovsky ©   (30.05.06 05:25) [10]

Можно, я делал. Насколько помню, там в StartupInfo есть флаг соответствующий, в параметрах CreateProcess тоже на эту тему что-то есть.


Leonid Troyanovsky   (2006-05-30 05:25:00) [4]


> Юрий Зотов ©   (30.05.06 03:22) [9]

> чужую, делая дескрипторы стандартного ввода-вывода наследуемыми


AFAIK, для консоли нельзя.

--
Regards, LVT.


Юрий Зотов   (2006-05-30 03:22:00) [5]

Запускаем свою программу, та создает консоль и в ней запускает чужую, делая дескрипторы стандартного ввода-вывода наследуемыми - а в итоге получает доступ к буферам ввода-вывода чужой программы.


Leonid Troyanovsky   (2006-05-29 22:20:00) [6]


> Eraser ©   (29.05.06 18:29) [7]

> кроме как указать свои дескрипторы в STARTUPINFO я другово
> способа не зна, но


Если запускающий создает процесс в своей консоле, то
возможности ширее.

--
Regards, LVT.


Eraser   (2006-05-29 18:29:00) [7]


> Steplerr ©

кроме как указать свои дескрипторы в STARTUPINFO я другово способа не зна, но возможно такой способ есть, и даже не хакерский.


Steplerr   (2006-05-29 17:59:00) [8]

В хелпах нашёл раздел Console Functions с богатым ассортиментом (AllocConsole, CreateConsoleScreenBuffer,...,ReadConsole,...), актуальны ли они при работе с чужой консолью?


Steplerr   (2006-05-29 17:44:00) [9]

Спасибо за ссылку, много интересного узнал. Но чего-то я не соображу как организовать такую штуку:
Человек сидит и нормально работает с программой и в определённый момент запускает мою прогу, которая считывает кусочек текста с консоли выполняет кое-какую работу и благополучно закрывается, а консольная программа продолжает работать дальше.

З.Ы. Ещё раз спасибо Eraser за ссылку.


Eraser   (2006-05-29 16:36:00) [10]

http://www.torry.net/quicksearchd.php?String=console&Title=Yes
"How to capture console application output"
"Redirect Console"


Steplerr   (2006-05-29 16:26:00) [11]

Мне нужно обработать в определённый момент вывод консольной псевдографичесокой программы, а до этого момента нужно что-бы пользователь работал с ней как обычно.


Desdechado   (2006-05-29 16:11:00) [12]

> Вариант типа proga.exe > file.txt - не подойдёт
почему?
а вариант proga1.exe | proga2.exe
?


TUser   (2006-05-29 16:10:00) [13]

Надо создать PIPE и читать через него. Подробности есть в Яндексе.


Наверх

Титульная страница Поиск, карта сайта Написать письмо