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

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

перехват вывода в файл [D5, D6, Win95/98]


Joseph ©   (2002-06-27 09:52:00) 

Вопрос в следующем: DOS-овская программа выводит строки в файл, имя которого известно. Как перехватить этот вывод, т.е. получать эти строки в свое приложение по мере их формирования и без записи в файл.


Shaman_Naydak   (2002-07-05 12:20:00) [1]

Если программа досовская и винды 95/98, то можно попробовать применить технику обычного доса - перехватить 21h соответствующие ф-ции и в путь..
НО.. может и не сработать, если винды не вернут управление досовскому обработчику 21h (этим сильно грешили 3.11 винды, но в 95 это дело поправили).. в любом случае есть какие-то настройки, позволяющие это сделать однозначно..
Подробно этот вопрос описывается в книге Эндрю Шульмана "Неофициальная Windows"95"


ggrisha   (2002-07-05 09:27:00) [2]

Если в консоле нужно перехватывать winapi, то в DOSе нужно перехватывать int 21h.


SV   (2002-07-05 02:34:00) [3]

Наглый вариант - править саму DOS- программу.


paul_shmakov   (2002-07-01 14:59:00) [4]

а программа точно досовская? может консольная win32?
была бы она консольной win32 можно применить перезват api.
(вот, кстaти, пример использования перехвата api в мирных целях, а то все говорят вирусы-трояны :)

перехватить CreateFile, WriteFile.


Fellomena   (2002-07-01 11:41:00) [5]

2 Юрий Зотов © (27.06.02 16:32):

...мда, мозги у меня на югах расплавились imho
Есественно, файл - это не stdout 8(

SORRY.
(вот из-за таких ламеров, как я, умные люди в заблуждение вводятся 8(

А что, если открыть своей программой этот файл с эксклюзивными провами и каким-нибудь образом перехватывать то, что в него пробует записать другая программа?
хм... но в таком случае в той программе будет возникать ошибка доступа к ресурсу... интерестно, а можно её перехватить как-нибудь... наверное нет, это тебе не WH_KEYBOARD, хотя что-нибудь попридумывать можно наверняка...



Юрий Зотов   (2002-06-27 16:32:00) [6]

> программа выводит строки в файл
> переопределяй стандартный stdout

Fellomena, ай-яй-яй. Разве файл - это стандартный stdout? Ничего не даст такое переопределение.

Конечно, хорошо бы переопределить вывод, но, боюсь, с файлом это не получится (по крайней мере, в мою голову ничего полезного на эту тему с ходу не приходит, может кто другой сообразит).

Попробуйте FindFirst(Next..)ChangeNotification. Не обязательно, но может получиться - все зависит от того, КАК именно программа пишет. Самой записи избежать не удастся, но уведомление о ней Вы все же получите.

На самый худой конец остается самый тупой способ - периодически проверять длину файла и считывать с него добавившийся кусок. Но это - в последнюю очередь.


Fellomena   (2002-06-27 12:17:00) [7]

переопределяй стандартный stdout и от этого рули...


Наверх

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