| Автор
| Сообщение |
 TuXAPuK
Великий гонщик


Возраст: 26
Знак зодиака: 
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
|
|
|
Цитата |
|
Возник такой щепетильный вопрос а как можно прочитать данные с StdOut консольного окна, созданного функцией AllocConsole? =(
Так как многие игровые сервера например тот-же Half Life создают свои окна через AllocConsole, и читать с них что-либо становится противной задачей...
Вот например :
| delphi: | program Project1; {$APPTYPE CONSOLE} begin WriteLn('HelloWorld'); end.
|
Запустив :
project1 > test.txt
В файле test.txt получаем текст HelloWorld
А вот запустив - такой вот код :
| delphi: | program Project1; uses Windows; begin AllocConsole(); WriteLn('HelloWorld'); end.
|
В файле получаем кукиш с маслом.
Я уже пытался по разному извратится, и через хук приконнектится, и по разному... Есть-ли вообще возможность хотя-бы через хук клонировать папйп и обрабатывать его своей программой?
_________________
 |
|
| В начало |
|
 |
|
|
 |
Hunter
Энтузиаст

Зарегистрирован: 14.09.2006
Сообщения: 349
|
|
|
Цитата |
|
| Можно попробовать запустить консольную прогу из своей с переназначением стандартного ввода-вывода. Смотри CreateProcess() и инфу в инете на тему "перенаправление STDIO". Но там тоже есть свои подводные камни, некоторые проги используют внутренний буфер ввода-вывода. Это значит, что данные в STDIO появляются не в реальном времени, а при переполнении буфера или закрытии проги. Лекарство от этого я в свое время не нашел.
|
|
| В начало |
|
 |
 TuXAPuK
Великий гонщик


Возраст: 26
Знак зодиака: 
Зарегистрирован: 12.09.2005
Сообщения: 714
Откуда: Великий город Рига... =Ъ
|
|
|
Цитата |
|
Да нашол классный компонент... TDosCommand он переводит на себя весь IO но вот в dedicated сервер quake1 он сбрасывает в ошибку... =( Так как WinQuake использует KeyboardInput Events, а любой stdin глушится...
В Attach добовляю компонент... Просто понравился очень...
Добавлено спустя 5 минут 3 секунды:
| Hunter писал(а): | | Можно попробовать запустить консольную прогу из своей с переназначением стандартного ввода-вывода. Смотри CreateProcess() и инфу в инете на тему "перенаправление STDIO". Но там тоже есть свои подводные камни, некоторые проги используют внутренний буфер ввода-вывода. Это значит, что данные в STDIO появляются не в реальном времени, а при переполнении буфера или закрытии проги. Лекарство от этого я в свое время не нашел. | Слушай а не переводя STDIN можно только STDOUT захватывать? Просто STDIN мне не нужен. Всего лишь сервис статистики написать....
| Описание: |
| Для установки переименовать .pas.txt в .pas и добавить $(DELPHI)libdclusr.dpk и откомпелить... |
|
 Скачать |
| Имя файла: |
DosCommand.pas.txt |
| Размер: |
20.96 KB |
| Загружен: |
243 раз(а) |
_________________
 |
|
| В начало |
|
 |
|
|
|
Цитата |
|
| Цитата: | | Слушай а не переводя STDIN можно только STDOUT захватывать? Просто STDIN мне не нужен. Всего лишь сервис статистики написать.... |
Можно. Более того, при переводе STDIO мы получаем по два хендла на каждый пайп (на оба конца), а для перехвата нужен только один.
|
|
| В начало |
|
 |
|