Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Вниз

stdout?   Найти похожие ветки 

 
Alexcool   (2002-07-24 12:32) [0]

Есть приложение, которое пишет в stdout некую информацию. Мне нужно написать на Delphi другое приложение, которое бы могло перехватывать эту информацию, ну и потом конечно как-то обрабатывать. Каюсь, я совершенно ничего об этом не знаю, подскажите, где почитать по stdout/stdin и как с ним работать в Дельфях, и если кто знает как решить мою проблему (перехват). Буду признателен за любые примеры и ссылки!


 
Виктор Щербаков   (2002-07-24 13:00) [1]


> Есть приложение, которое пишет в stdout некую информацию.
> Мне нужно написать на Delphi другое приложение, которое
> бы могло перехватывать эту информацию, ну и потом конечно
> как-то обрабатывать.

Запускай приложение с помощью CreateProcess.
В структуре STARTUPINFO переопредели поле hStdOutput на нужный тебе хэндл (например на временный файл и.т.п)

> Каюсь, я совершенно ничего об этом не знаю, подскажите,
> где почитать по stdout/stdin и как с ним работать в Дельфях

С помощью API-функции GetStdHandle.


 
DiamondShark   (2002-07-24 13:05) [2]

Делается это при помощи каналов (pipes).
Последовательность примерно такая:

Создается канал (CreatePipe). Получаем два хэндла (концы трубы) один для чтения, другой для записи. Один конец остается нашей программе, другой надо передать внешнему процессу.

Надо создать наследуемый хэндл (для передачи процессу). Это делается либо DuplicateHandle (все винды), либо указать SECURITY_ATTRIBUTES в CreatePipe (только NT, тогда DuplicateHandle не нужен).

Если у нас винда9х (или мы пишем универсально) у нас один конец трубы расщеплен (есть на него два хэндла). Тот хэндл который не наследуемый нам нафиг не нужен, и его можно закрыть CloseHandle. А наследуемый хэндл надо записать в STARTUPINFO перед вызовом CreateProcess

Если нужно перехватить и ввод и вывод, все вышеописанное надо повторить дважды, поменяв концы.

Подробности в SDK Help или в MSDN по теме "Pipes"


 
Alexcool   (2002-07-24 16:04) [3]

to DiamondShark
В принципе получилось, однако есть следующая проблема:
Процедуру ReadFile я вызываю в цикле, пока запущено внешнее приложение, и процедура возвращается только после того, как в буфер будут записаны 128 байт данных, которые она и читает. Читает успешно, но мне бы хотелось, чтобы процедура ReadFile возвращалась немедленно. Я вообще пока не понимаю, откуда взялось число 128 - максимальный буфер у меня 65535, ReadFile вызываю с параметром 1024 байта прочитать...


 
DiamondShark   (2002-07-24 17:49) [4]

Читайте по 1 байту



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.007 c
7-50996
YDV
2002-06-19 11:42
2002.09.16
расшаривание COM портов в сети !...


7-50995
wistler
2002-07-04 22:56
2002.09.16
Программирование модема.


1-50836
stas_a
2002-09-03 16:21
2002.09.16
Удалить себя


1-50778
vlv
2002-09-03 11:06
2002.09.16
Как по узнать запускаемый файл приложения по его Hinstance?


1-50678
Mazenrat
2002-09-04 18:33
2002.09.16
Переворот TrackBar.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский