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

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

Как взять текст из ДОС-окна [D5]


Anikul ©   (2003-08-11 22:22:00) 

Ребята, такая вот проблема. Есть ДОС-приложение (не моё), я его запустил своей программой, и передал ей параметры (сэмулировал клавиатуру), как мне из этого окна считать экран с определённых знакомест (пару строчек, например)... Надо выдернуть оттуда текстовые строки в определённом месте окна ДОС-программы... Хэндл окна есть...
P.S. у меня Win2k...


Polevi   (2003-08-13 15:23:00) [1]

попробуй
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=1057316445&n=15


Anikul   (2003-08-12 20:31:00) [2]

вывод в той программе мне неизвестен, так как то "левая" программка - "секретная" (работает с секретными данными) :), просто необходимо ей обработать много данных, иммитирую клавиатуру - "ввожу" и надо вырезать данные с этого запущенного консольного приложения.
Теоретически почти работает, пользую ReadConsolOutput, но почему-то виснит... Ввод осуществляю с пом ловушек, и ввод и чтение работают по одиночке, коряво, но работают, вместе всё виснет... :(


nikkie   (2003-08-12 11:15:00) [3]

Все зависит от того, как осуществляется вывод в этой программе. Если просто пишется в stdout, то проще всего будет читать именно этот вывод, а не консоль. В этом случае и пригодится pipe. Если же вывод идет в ДОС-окно по координатам (а почему-то слова "текстовые строки в определённом месте окна ДОС-программы" наводят меня именно на эту мысль), то что-то мне сомнительно, что pipe хоть что-то получит... Я бы сделал в вызывающей программе AllocConsole (если у нее нет уже консоли). hStdInput и т.п. можно не заполнять - консоль пронаследуется при CreateProcess автоматом (если не предпринимать специальных действий препятствующих этому). После запуска программы читаем с помощью ReadConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), ...).


Evgeny V   (2003-08-12 06:31:00) [4]

СreateProcess - там StartupInfo.hStdOutput и StartupInfo.hStdInput, например CreatePipe (&hReadPipe, &hWritePipe, &SecAttr, 0) StartupInfo.hStdOutput =hWritePipe;
StartupInfo.hStdInput =hReadPipe;(код на си), если так то смотри и про Pipe


nikkie   (2003-08-12 01:01:00) [5]

По идее это можно сделать с помощью ReadConsoleOutputCharacter. Только, судя по самплу в MSDN, первым параметром должен быть хендл stdout. Вопрос, как тебе его получить... Видимо узнать его у абстрактного консольного приложения сложно, но если ты сам запускаешь эту программу, то ты можешь назначитьей stdout. Смотри CreateProcess, поля hStdInput и т.п. в структуре STARTUPINFO и флаг STARTF_USESTDHANDLES.


Наверх

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