Amper25 0 26 июня, 2009 Опубликовано 26 июня, 2009 · Жалоба Есть вопрос сугубо PC-программерский. ShellExecute() позволяет выполнять любые консольные команды. А вот как получать ответ этих команд? К примеру я выполняю Ping c помощью ShellExecute. При этом в окошке Ping пишет доступен или нет такой-то адрес. А как с помощью программы прочитать то что ответил этот пинг? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 26 июня, 2009 Опубликовано 26 июня, 2009 · Жалоба Используйте вместо ShellExecute CreateProcess. там в lpStartupInfo можно передать свои хэндлы stdin, stdout и stderr. А в эти хэндлы указать пайпы (pipes). В общем - голимый RTFM: http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 26 июня, 2009 Опубликовано 26 июня, 2009 · Жалоба Можно проще. Запускать шеллом батник. "Ping > answer.txt" Весь вывод уйдет в файл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 27 июня, 2009 Опубликовано 27 июня, 2009 · Жалоба Есть вопрос сугубо PC-программерский. ShellExecute() позволяет выполнять любые консольные команды. А вот как получать ответ этих команд? К примеру я выполняю Ping c помощью ShellExecute. При этом в окошке Ping пишет доступен или нет такой-то адрес. А как с помощью программы прочитать то что ответил этот пинг? В аттачменте - программа с асинхронным чтением данных с выхода процесса (пригодится при зависающих программах). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Amper25 0 29 июня, 2009 Опубликовано 29 июня, 2009 · Жалоба Спасибо за ответы. А как обычно определяют конец передачи по Pipe? Я сейчас жду окончания процесса, и затем читаю Pipe. Но он подвисает во время чтения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 30 июня, 2009 Опубликовано 30 июня, 2009 · Жалоба Я когда-то давно запускал ассемблер писаный для дос из дельфей. Если после команды дос или cmd поставить знак ">" это означает перенаправление вывода в файл (или устройство). Также можно и перенаправить ввод значком <. Окончание работы программы определяется по появлению нужного файла... Работает железно. А самое главное - будет работать под любой ОС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Amper25 0 30 июня, 2009 Опубликовано 30 июня, 2009 · Жалоба Спасибо за советы. Разобрался уже. Чтобы не подвисало надо перед чтением делать CloseHandle для Pipe c той стороны. Иначе, если вызванный процесс завершился, и попробовать выполнять ReadFile, то он будет до бесконечности ждать ввода с той стороны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 30 июня, 2009 Опубликовано 30 июня, 2009 · Жалоба А самое главное - будет работать под любой ОС. А вот это как раз вряд-ли. Это какая-то "дырка" запуска через шелл винды, позволяющая чисто cmd-шной фичи (в виде значков перенаправления) выполняться. В других ОС скорее всего вообще такого понятия "запуск через шелл" нет. А вот переназначение stdin/stdout/stderr и трубы (Pipes) есть во всех ОС, в которых есть сам stdin/stdout Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 1 июля, 2009 Опубликовано 1 июля, 2009 · Жалоба Зато во всех есть ">". Под всеми - имеются ввиду 2 ОС, которые существуют на планете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NullPointer 0 1 июля, 2009 Опубликовано 1 июля, 2009 · Жалоба Зато не везде есть права на создание файлов. И вообще где их создавать нету. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться