Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Borland c++ ShellExecute()
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Amper25
Есть вопрос сугубо PC-программерский.

ShellExecute() позволяет выполнять любые консольные команды. А вот как получать ответ этих команд?
К примеру я выполняю Ping c помощью ShellExecute. При этом в окошке Ping пишет доступен или нет такой-то адрес.
А как с помощью программы прочитать то что ответил этот пинг?
SM
Используйте вместо ShellExecute CreateProcess. там в lpStartupInfo можно передать свои хэндлы stdin, stdout и stderr. А в эти хэндлы указать пайпы (pipes). В общем - голимый RTFM: http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx
DpInRock
Можно проще. Запускать шеллом батник.
"Ping > answer.txt"
Весь вывод уйдет в файл.
Genadi Zawidowski
Цитата(Amper25 @ Jun 26 2009, 22:29) *
Есть вопрос сугубо PC-программерский.

ShellExecute() позволяет выполнять любые консольные команды. А вот как получать ответ этих команд?
К примеру я выполняю Ping c помощью ShellExecute. При этом в окошке Ping пишет доступен или нет такой-то адрес.
А как с помощью программы прочитать то что ответил этот пинг?

В аттачменте - программа с асинхронным чтением данных с выхода процесса (пригодится при зависающих программах).
Amper25
Спасибо за ответы.

А как обычно определяют конец передачи по Pipe? Я сейчас жду окончания процесса, и затем читаю Pipe. Но он подвисает во время чтения.
DpInRock
Я когда-то давно запускал ассемблер писаный для дос из дельфей.
Если после команды дос или cmd поставить знак ">" это означает перенаправление вывода в файл (или устройство).
Также можно и перенаправить ввод значком <.
Окончание работы программы определяется по появлению нужного файла... Работает железно. А самое главное - будет работать под любой ОС.
Amper25
Спасибо за советы. Разобрался уже. Чтобы не подвисало надо перед чтением делать CloseHandle для Pipe c той стороны. Иначе, если вызванный процесс завершился, и попробовать выполнять ReadFile, то он будет до бесконечности ждать ввода с той стороны.
SM
Цитата(DpInRock @ Jun 30 2009, 13:51) *
А самое главное - будет работать под любой ОС.

А вот это как раз вряд-ли. Это какая-то "дырка" запуска через шелл винды, позволяющая чисто cmd-шной фичи (в виде значков перенаправления) выполняться. В других ОС скорее всего вообще такого понятия "запуск через шелл" нет. А вот переназначение stdin/stdout/stderr и трубы (Pipes) есть во всех ОС, в которых есть сам stdin/stdout
DpInRock
Зато во всех есть ">". Под всеми - имеются ввиду 2 ОС, которые существуют на планете.
SysRq
Зато не везде есть права на создание файлов. И вообще где их создавать нету.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.