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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] StdOutRead и ShellExecute (http://forum.oszone.net/showthread.php?t=182740)

ShogenOFF 12-08-2010 12:40 1472076

StdOutRead и ShellExecute
 
Есть консольная прога, которая запускается с параметрами с помощью ShellExecute(). В справке написано, что StdOutRead только для запуска с помощью Run(). Вопрос: как получить выдачу(по-моему эт так называется) консоля, т.е. то, что отображается на экране, eсли запущен процесс ShellExecute'ом?

kaster 12-08-2010 13:32 1472118

ShogenOFF, запускать Run'ом?

Microteam 12-08-2010 16:25 1472266

Да я понял ваш вопрос поробуйте с помощью ConsoleRead()

ShogenOFF 12-08-2010 16:32 1472270

Не понял.....Мне нужно запустить консльную прогу с параметрами и с выводом выдачи консоля

kaster 12-08-2010 16:52 1472278

ShogenOFF, любую программу запущенную ShellExecute'ом можно запустить Run'ом

madmasles 12-08-2010 17:43 1472312

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

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

$sLog = ''
$hIPconfig = Run('IPCONFIG /?', '', @SW_HIDE, $STDOUT_CHILD)
;$hIPconfig = Run(@ComSpec & ' /C IPCONFIG /?', '', @SW_HIDE, $STDOUT_CHILD)
While 1
    $sLog &= StdoutRead($hIPconfig)
    If @error Then ExitLoop
    Sleep(10)
WEnd
;$sLog = _Encoding_866To1251($sLog)
MsgBox(0, '', $sLog)

Поменяйте IPCONFIG на Вашу консольную программу, /? - на Ваши параметры, , '', - на Вашу рабочую директорию. На всякий случай: Encoding UDF. (если будут вылазить кракозябры).

saavaage 14-08-2010 02:52 1473372

madmasles, а если понадобиться вывести данные $sLog не в меседж-бокс, а в GuiEdit, например?

Что-то у меня не выводятся:
Код:

********* задание формы и т.д.

$Edit1 = GUICtrlCreateEdit("", 24, 64, 481, 233)
local $sLog = ''
local $hIPconfig = Run(@ComSpec & ' /C CSCRIPT %SYSTEMROOT%\system32\eventquery.vbs /fi "Type eq ERROR" /fo TABLE /NH', '', @SW_HIDE, $STDOUT_CHILD)
While 1
    $sLog &= StdoutRead($hIPconfig)
    If @error Then ExitLoop
    Sleep(10)
WEnd
GUICtrlSetData ($Edit1, _Encoding_866To1251($sLog))

не могу понять, что мешает...

madmasles 14-08-2010 10:34 1473438

Цитата:

Цитата saavaage
не могу понять, что мешает... »

Странно. У меня все выводится, причем с тремя вариантами:
Код:

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

#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 623, 445, 192, 124)
$Edit1 = GUICtrlCreateEdit("", 104, 24, 433, 385)
$sLog = ''
;$hIPconfig = Run(@ComSpec & ' /C CSCRIPT %SYSTEMROOT%\system32\eventquery.vbs /fi "Type eq ERROR" /fo TABLE /NH', '', @SW_HIDE, $STDOUT_CHILD)
$hIPconfig = Run('CSCRIPT.exe ' & @SystemDir & '\eventquery.vbs /fi "Type eq ERROR" /fo TABLE /NH', '', @SW_HIDE, $STDOUT_CHILD)
;$hIPconfig = Run(@ComSpec & ' /C CSCRIPT ' & @SystemDir & '\eventquery.vbs /fi "Type eq ERROR" /fo TABLE /NH', '', @SW_HIDE, $STDOUT_CHILD)
While 1
    $sLog &= StdoutRead($hIPconfig)
    If @error Then ExitLoop
    Sleep(10)
WEnd
GUICtrlSetData($Edit1, _Encoding_866To1251($sLog))
$Button1 = GUICtrlCreateButton("Обновить", 16, 120, 65, 57)
GUICtrlSetState(-1, $GUI_FOCUS)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $Button1
            GUICtrlSetData($Edit1, '')
            $sLog = ''
            ;$hIPconfig = Run(@ComSpec & ' /C CSCRIPT %SYSTEMROOT%\system32\eventquery.vbs /fi "Type eq ERROR" /fo TABLE /NH', '', @SW_HIDE, $STDOUT_CHILD)
            $hIPconfig = Run('CSCRIPT.exe ' & @SystemDir & '\eventquery.vbs /fi "Type eq ERROR" /fo TABLE /NH', '', @SW_HIDE, $STDOUT_CHILD)
            ;$hIPconfig = Run(@ComSpec & ' /C CSCRIPT ' & @SystemDir & '\eventquery.vbs /fi "Type eq ERROR" /fo TABLE /NH', '', @SW_HIDE, $STDOUT_CHILD)
            While 1
                $sLog &= StdoutRead($hIPconfig)
                If @error Then ExitLoop
                Sleep(10)
            WEnd
            GUICtrlSetData($Edit1, _Encoding_866To1251($sLog))
    EndSwitch
WEnd


saavaage 14-08-2010 12:31 1473501

madmasles, проблема, скорее всего, что у меня не одна вкладка и на каждой выполняются функции. Уже не в первый раз такое происходит.

Все, разобрался. Пропустил
#include <Constants.au3>

Показалось, что есть, а на самом деле - не было включено

saavaage 14-08-2010 12:56 1473507

madmasles, не подскажешь как вывод ограничить только нужной информацией. Мне, например, не надо, чтобы выводились эти строки:
Код:

Сервер сценариев Windows (Microsoft R) версия 5.7
c Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.

 
ИНФОРМАЦИЯ: Для журнала 'application' нет записей, отвечающих заданному критерию.
 
INFO: Нет доступных записей в журнале '%3'.
 
INFO: Нет доступных записей в журнале '%3'.

Можно сделать, чтобы выводилось, только то, что под ними? Т.е. начало вывода - с полосы

Код:

------------------------------------------------------------------------------
На всякий прикрепляю весь полученный вывод:
читать дальше »
Код:

Сервер сценариев Windows (Microsoft R) версия 5.7
c Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.

 
ИНФОРМАЦИЯ: Для журнала 'application' нет записей, отвечающих заданному критерию.
 
INFO: Нет доступных записей в журнале '%3'.
 
INFO: Нет доступных записей в журнале '%3'.
 
------------------------------------------------------------------------------
Перечисление событий в журнале 'system' для узла 'CAVE-0001974'
------------------------------------------------------------------------------
 ошибка        7011  08.10.2010 18:22:04      Service Control M CAVE-0001974


madmasles 14-08-2010 13:43 1473543

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

GUICtrlSetData($Edit1, StringRegExpReplace(_Encoding_866To1251($sLog), "(?s).*?'%3'.\r\n\s\r\n(.*?)", '\1'))

saavaage 14-08-2010 13:49 1473546

madmasles, отлично. Правда есть сомнения - не лучше ли отграничить именно первой линией --------------------. Этот элемент более постоянный, имхо.

PS Полез смотреть StringRegExpReplace

madmasles 14-08-2010 14:07 1473549

saavaage,
У меня выводится такой текст:
читать дальше »
Цитата:

Сервер сценариев Windows (Microsoft R) версия 5.7
c Корпорация Майкрософт (Microsoft Corp.), 1996-2001. Все права защищены.


------------------------------------------------------------------------------
Перечисление событий в журнале 'application' для узла 'HOME'
------------------------------------------------------------------------------
ошибка 1103 13.08.2010 9:43:07 .NET Runtime Opti HOME

INFO: Нет доступных записей в журнале '%3'.

------------------------------------------------------------------------------
Перечисление событий в журнале 'system' для узла 'HOME'
------------------------------------------------------------------------------
ошибка 59 08.09.2010 2:33:03 SideBySide HOME
и к первой линии не привязаться. (XP SP3 32)

Creat0R 21-08-2010 05:58 1478433

Мне кто нибудь может объяснить, что здесь обсуждается? тема называется «StdOutRead и ShellExecute», этот вопрос решён? мне кажется да, ещё на первой странице.

saavaage 21-08-2010 06:07 1478436

Creat0R, мы немного увлеклись и взглянули на проблему шире... :-)
в принципе, проблема и пример описаны в посте http://forum.oszone.net/post-1478325-24.html
Суть: натолкнулись на проблему ограничения вывода - в ListView
Цитата:

Цитата madmasles
не отображается полная строка с описанием ошибки (обрывается на 300 с чем-то знаков). »

Не поможете ее успешно побороть?

PS Судя по всему, придется потом перенести все в отдельную тему....

Creat0R 21-08-2010 06:12 1478437

Цитата:

Цитата saavaage
мы немного увлеклись и взглянули на проблему шире... :-) »

Ну я могу тоже увлечся и начать раздавать баны


Цитата:

Цитата saavaage
проблема и пример описаны в посте »

Отделяю...

Цитата:

Ума не приложу, как назвать тему...
Несколько Вопросов немного не в тему от saavaage

Тут больше не пишите.


Время: 18:50.

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