Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   нужно несколько примеров работы с вводом/выводом консольных программ (http://forum.oszone.net/showthread.php?t=179405)

crashtuak 29-06-2010 15:19 1443853

нужно несколько примеров работы с вводом/выводом консольных программ
 
Пытался сам разобраться, не вышло считать вывод, и ввести ничего не вышло, прошу дать несколько примеров. Буду благодарен.

madmasles 29-06-2010 15:54 1443874

crashtuak,
Здесь посмотрите: Коммуникация процессов при помощи STDIN/STDOUT.
Простой пример:
Код:

#include <Constants.au3>
#include <Encoding.au3>

$sLog = ''
$mod = Run(@ComSpec & " /C tasklist /?", "", @SW_HIDE, $STDOUT_CHILD)
While 1
    $sLog &= StdoutRead($mod)
    If @error Then ExitLoop
    Sleep(10)
WEnd

MsgBox(0, '', _Encoding_866To1251($sLog))

Encoding UDF - Библиотека для работы с кодировками строк

crashtuak 30-06-2010 13:26 1444449

madmasles, данный пример комуникации процессов поможет сделать что то на подобии многопоточности(потоков то и вправду будет несколько). Хоть и криво будет, но работает:)

crashtuak 30-06-2010 17:54 1444693

Вот код, который работает не до конца:
Код:

#include <Constants.au3>
#include <Encoding.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$Form1 = GUICreate("Form1", 633, 418, 192, 124)
$Input1 = GUICtrlCreateInput("Input1", 8, 384, 481, 21)
$Edit1 = GUICtrlCreateEdit("", 8, 8, 609, 369)
GUICtrlSetData(-1, "Edit1")
$Button1 = GUICtrlCreateButton("Button1", 496, 384, 121, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
$sLog = ''
$mod = Run("C:\android-sdk-windows\tools\adb.exe", "", @SW_MAXIMIZE , $STDOUT_CHILD)
While 1
    $sLog &= StdoutRead($mod)
        If @error Then ExitLoop
        Sleep(10)
WEnd
GUICtrlSetData ( $Edit1, _Encoding_866To1251($sLog))
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

                Case $Button1
                       
                       
        EndSwitch
WEnd

Нужный текст попросту не выводится в $sLog, но отображается в "отладочном окошке" (не знаю как оно правильно называется, обвел красным прямоугольником:)). Ну и так как в $sLog текст не попал, то и в $Edit1 он не попал тоже... В чем может быть проблема?

madmasles 30-06-2010 19:13 1444729

crashtuak,
У меня нет этой программы, так что не знаю, как Вам помочь.

crashtuak 01-07-2010 08:32 1445008

Вложений: 1
  • adb.rar (254.90 KB, скачиваний: 22)
madmasles, прошу помочь. adb прикрепил.

crashtuak 01-07-2010 09:31 1445024

Ну и еще один вопросик: почему при
Код:

$mod = Run("C:\windows\system32\cmd.exe", "C:\windows\system32\", @SW_MAXIMIZE , $STDOUT_CHILD)
консоль открывается и сразу закрывается, а при
Код:

$mod = Run("C:\windows\system32\cmd.exe")
остается работать?(но второй вариант неприменим, потому что надо STDOUT_CHILD)

madmasles 01-07-2010 10:24 1445067

crashtuak,
Попробуйте так:
Код:

#include <Constants.au3>

Local $foo = Run(@ComSpec & " /c adb.exe", '', @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
Local $line
While 1
    $line = StdoutRead($foo)
    If @error Then ExitLoop
WEnd

While 1
    $line = StderrRead($foo)
    If @error Then ExitLoop
    MsgBox(0, "STDERR read:", $line)
WEnd


crashtuak 01-07-2010 10:34 1445073

madmasles, оу, спасибо, пашет. Возьму себе на вооружение:если с STDOUT самой проги считать неполучается-считывай с CMD:)

Ой, а про моментальное закрытие консоли я так и не уточнил...


Время: 16:50.

Время: 16:50.
© OSzone.net 2001-