Что нового

Возврат внешней программы?

G

GamletSPB

Гость
Возникла потребность получить возврат некой внешней программы. Всякие там Run() возвращают только собственные коды ошибок, а вот как получить возврат того что они собственно запускают?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Если эти программы не имеют изначально вложенной функции возврата инфы то вроде нельзя.
Можно разве что присосаться к памяти процесса и личить оттуда некоторую инфу.
 
Автор
G

GamletSPB

Гость
Belfigor сказал(а):
Если эти программы не имеют изначально вложенной функции возврата инфы то вроде нельзя.

немного не догнал, что подразумевается под функцией возврата?
 

ynbIpb

Скриптер
Сообщения
399
Репутация
110
нужно запустить совсем левое приложение и чтоб от его запуска что-то вернулось? но что? :shok:
Run возвращает внутренний идентификатор дочернего процесса (PID)
Тоесть этот процесс например можно потом закрыть используя PID
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
GamletSPB сказал(а):
Belfigor сказал(а):
Если эти программы не имеют изначально вложенной функции возврата инфы то вроде нельзя.

немного не догнал, что подразумевается под функцией возврата?
под функцией возврата подразумевается изначально вложенная в программу возможность выводить свои данные наружу в какое-нибудь хранилище данных, откудова потом ты сможешь брать эти данные.
 
Автор
G

GamletSPB

Гость
Belfigor сказал(а):
под функцией возврата подразумевается изначально вложенная в программу возможность выводить свои данные наружу в какое-нибудь хранилище данных, откудова потом ты сможешь брать эти данные.

в том то и дело что функция такая есть: после исполнения в консоли программа возвращает некую строку данных, которую мне очень бы не помешало обработать, но вот как ее прочитать?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Куда она ее возвращает то? Обратно в консоль?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Читай хелп вот по этой программе: ConsoleRead. Мб поможет.
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
В своё время писал программу для отправления консольных команд и получения результатов в GUI окно (Зачем не спрашивайте - сам не знаю :()
Код:
#include <Constants.au3> 

Global $sStdOut = "" 
Global $sStdErr = "" 

DOS("ping 127.0.0.0")

Func DOS($iCommand,$iKey = "")
	$Process = Run(@ComSpec & " /c " & $iCommand & $iKey, @SystemDir, @SW_HIDE, $STDOUT_CHILD)
While 1 
    $sStdOut = StdoutRead($Process) & @CRLF
	If @error Then ExitLoop 
    $sStdOut = StringReplace($sStdOut, @CRLF, "") 
    $sStdOut = StringReplace($sStdOut, @CR & @CR, @CR)
    $sStdOut = OemToChar($sStdOut) 
    ConsoleWrite($sStdOut)
WEnd 
EndFunc

Func OemToChar($szSrc) 
Local $placeholder 
    For $i = 0 To StringLen($szSrc) 
        $placeholder &= "  " 
    Next 
    Local $lRetVal = DllCall("user32.dll", "long", "OemToChar", "str", $szSrc, "str", $placeholder) 
    If IsArray($lRetVal) And $lRetVal[0] = 1 Then 
        Return SetError(0, 0, $lRetVal[2]) 
    EndIf 
 
    Return SetError(1, 0, "") 
 EndFunc

Вот пример тех функций которые бsли основой программы.

Вместо ConsoleWrite() можно использовать любую другую функцию вывода информации.
 

TheBloodTear

Знающий
Сообщения
36
Репутация
9
Есть программка, которая создает backup базы.. Не знаю, на чем она написана, но у нее у самой весь процесс отображается в консоли, и если создать bat-файл, то и в cmd все отображается хорошо..

При помощи вышеприведенного примета, все здорово считывается, как надо кроме одного:
Есть момент когда идет показатель процентов сделанной копии, и эти проценты не добавляются а заменяются.. Консоль замирает на одном месте и меняется только число.. Вот эти проценты я не могу никак вынуть :(..

Может кто сталкивался с подобным? :(.. Буду очень благодарен, если поделитесь решением ;)..

P.S. Утилита называется HotCopy.exe.. Входит в состав Microsoft Navision.. Для того, что бы тестировать, много мороки, поэтому хотелось бы просто парочку идей :smile:..
 
Верх