реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Borland c++ ShellExecute(), Как получить текст из окна консоли.
Amper25
сообщение Jun 26 2009, 18:29
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



Есть вопрос сугубо PC-программерский.

ShellExecute() позволяет выполнять любые консольные команды. А вот как получать ответ этих команд?
К примеру я выполняю Ping c помощью ShellExecute. При этом в окошке Ping пишет доступен или нет такой-то адрес.
А как с помощью программы прочитать то что ответил этот пинг?
Go to the top of the page
 
+Quote Post
SM
сообщение Jun 26 2009, 18:46
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Используйте вместо ShellExecute CreateProcess. там в lpStartupInfo можно передать свои хэндлы stdin, stdout и stderr. А в эти хэндлы указать пайпы (pipes). В общем - голимый RTFM: http://msdn.microsoft.com/en-us/library/ms682499(VS.85).aspx
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jun 26 2009, 19:33
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Можно проще. Запускать шеллом батник.
"Ping > answer.txt"
Весь вывод уйдет в файл.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jun 27 2009, 16:43
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(Amper25 @ Jun 26 2009, 22:29) *
Есть вопрос сугубо PC-программерский.

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

В аттачменте - программа с асинхронным чтением данных с выхода процесса (пригодится при зависающих программах).
Go to the top of the page
 
+Quote Post
Amper25
сообщение Jun 29 2009, 15:57
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



Спасибо за ответы.

А как обычно определяют конец передачи по Pipe? Я сейчас жду окончания процесса, и затем читаю Pipe. Но он подвисает во время чтения.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jun 30 2009, 09:51
Сообщение #6


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Я когда-то давно запускал ассемблер писаный для дос из дельфей.
Если после команды дос или cmd поставить знак ">" это означает перенаправление вывода в файл (или устройство).
Также можно и перенаправить ввод значком <.
Окончание работы программы определяется по появлению нужного файла... Работает железно. А самое главное - будет работать под любой ОС.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Amper25
сообщение Jun 30 2009, 12:49
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



Спасибо за советы. Разобрался уже. Чтобы не подвисало надо перед чтением делать CloseHandle для Pipe c той стороны. Иначе, если вызванный процесс завершился, и попробовать выполнять ReadFile, то он будет до бесконечности ждать ввода с той стороны.
Go to the top of the page
 
+Quote Post
SM
сообщение Jun 30 2009, 21:46
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(DpInRock @ Jun 30 2009, 13:51) *
А самое главное - будет работать под любой ОС.

А вот это как раз вряд-ли. Это какая-то "дырка" запуска через шелл винды, позволяющая чисто cmd-шной фичи (в виде значков перенаправления) выполняться. В других ОС скорее всего вообще такого понятия "запуск через шелл" нет. А вот переназначение stdin/stdout/stderr и трубы (Pipes) есть во всех ОС, в которых есть сам stdin/stdout
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jul 1 2009, 05:24
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Зато во всех есть ">". Под всеми - имеются ввиду 2 ОС, которые существуют на планете.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
SysRq
сообщение Jul 1 2009, 09:47
Сообщение #10


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Зато не везде есть права на создание файлов. И вообще где их создавать нету.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 00:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01419 секунд с 7
ELECTRONIX ©2004-2016