![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| icm |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 30.4.2006 Репутация: нет Всего: нет |
Суть вот в чём. Нужно, чтобы в неконсольной программе можно было использовать Write/WriteLn, и всё это выводилось в Memo.
Возможен вариант с AllocConsole, но мне он не очень подходит, т.к. нужно выводить именно в Мемо. Конкретный пример применения - подключение старых юнитов, которые в случае чего сразу выдают сообщение в stdout. На форуме много постов, где обсуждается перехват вывода другого консольного приложения, но вот конкретно по этой теме ничего не нашёл |
|||
|
||||
| Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 5 Всего: 29 |
|
|||
|
||||
| icm |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 30.4.2006 Репутация: нет Всего: нет |
2Rouse_: Спасибо за пример, но я не это имел в виду.
Перегруженная функция лишена всех преимуществ оригинальной: здесь можно писать только стринг, и только один. А в оригинале кол-во параметров и их типы могут быть различными. Т.е. мне не нужно писать что-то вместо оригинальной функции Write/WriteLn, а надо лишь "перехватить" то, что выводит оригинал. P.S. Админ почему-то решил, что эта тема больше подходит "для общих вопросов" и переместил его сюда, хотя изначально я имел в виду именно вариант работы с пайпами или нечто подобное. |
|||
|
||||
| Rouse_ |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 469 Регистрация: 23.4.2005 Репутация: 5 Всего: 29 |
А почему не пододит? Создавай свою консоль, все будет уходить в нее, а ты читай что там появляется и выводи на экран. |
|||
|
||||
| Nickel |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 7.2.2006 Репутация: 2 Всего: 4 |
Если не критично быстродействие, то можно перенаправить вывод в файл и потом оттуда читать:
|
|||
|
||||
| icm |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 30.4.2006 Репутация: нет Всего: нет |
Тут даже не столько в быстродействии проблема, сколько в необходимости постоянно обновлять в мемо содержимое файла, чтобы сообщения появлялись сразу.... Может кто-нибудь подскажет вариант с пайпами? Добавлено @ 16:25
Этот вариант подошёл бы, если б: 1. само консольное окно было скрыто (в принципе не сложно); 2. вывод из Write/WriteLn сразу же появлялся в Мемо во время выполнения программы Если есть предложения, как это можно сделать, с радостью выслушаю. |
||||||
|
|||||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Лень. Это нужно создавать консоль, получать ее хэндл, создавать тред, который будет в консоль писать, а из своего треда из нее читать...
Многа возни. Времени на это нет. |
|||
|
||||
| Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 31 Всего: 155 |
А мы не телепаты... что ты решил Много раз обсуждалось и приводились решения... -------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
| icm |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 30.4.2006 Репутация: нет Всего: нет |
Значит, я ошибался, понадеявшись, что не мне одному очевидно, что полностью эта задача решается только посредством использования WinAPI
Я ранее писал:
Если на самом деле обсуждалась именно эта проблема (а НЕ перехват вывода в консоль ДРУГОГО приложения), буду очень благодарен, если Вы укажете мне ссылку. 2Snowy: Я понимаю, лень и всё такое... но я же не прошу привести мне полностью рабочий код, хотя бы его ключевые моменты. |
||||||
|
|||||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Возьми пример запуска консольного приложения и чтения его вывода.
Только замени CreateProcess на AllocConsole и CreateThread. Создай процедуру, которая будет запускаться тредом, вызывать код, пишущий в консоль, делать FreeConsole и закрывать тред. Все остальное примерно такое же. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
icm, С консолью сам не работал, но поискав нашел неплохую статью, вроде то что нужно.
http://delphiworld.narod.ru/base/stdin_stdout.html -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Nickel |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 7.2.2006 Репутация: 2 Всего: 4 |
icm, хочешь пайпы? на тебе пайпы, тока от файлов они отличаются не особенно сильно и пока не вызовешь CloseFile(output) в пайп ничего не напишется.
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |