Что нового

[Данные, строки] Доступ к данным из ConsoleWrite, после компиляции.

NoMad73rus

Продвинутый
Сообщения
124
Репутация
80
Долгое время отлаживал работу скрипта запуская его через STITe, и для отладки в консоли ведётся весьма информативный лог формирующийся с помощью ConsoleWrite(). Возникла необходимость получить доступ(отобразить в GUI) к этому логу. Пробовал использовать StdoutRead(), но толи я чего не понимаю, толи не подходит оно для того...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
NoMad73rus
а скрипт покажешь?
 
Автор
N

NoMad73rus

Продвинутый
Сообщения
124
Репутация
80
Kaster сказал(а):
NoMad73rus
а скрипт покажешь?
Сам скрипт огромен, и лишён GUI. Он и врядли что-то прояснит. Он компилируется в exe. Для управления, и настройки используется отдельный ехе-шник, в котором собственно GUI. Если убрать всё лишнее, то пробовал делать так:

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$StatWindow = GUICreate($titl, 271, 711, 287, 127)

$Edit1 = GUICtrlCreateList("", 8, 400, 257, 273, $ES_READONLY)
GUICtrlSetData(-1, "")
GUICtrlSetState(-1, $GUI_DISABLE)
$prog_id = Run("batle.exe")
AdlibRegister('_getStat', 1000)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _getStat()
	$read = StdoutRead($prog_id, 100)
	GUICtrlSetData($Edit1, $read, 'edit')
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
NoMad73rus
Попробуйте поменять
Код:
$prog_id = Run("batle.exe")
;на
#include <Constants.au3>
;...
$prog_id = Run("batle.exe", '', @SW_HIDE, $STDOUT_CHILD)

У меня так работает.
2.exe:
Код:
For $i = 1 To 10
	ConsoleWrite($i & ' Message ' & Random(10, 100, 1) & @LF)
	Sleep(1000)
Next
ConsoleWrite(@LF & 'Все.')

1.au3:
Код:
#include <Constants.au3>

$fWork = True
$Pid = Run(@ScriptDir & '\2.exe', '', @SW_HIDE, $STDOUT_CHILD)

AdlibRegister('_getStat', 1000)

While $fWork
	Sleep(10)
WEnd

MsgBox(64, 'Info', 'Все.')

Func _getStat()
	Local $sLog = StdoutRead($Pid, True)
	ToolTip($sLog, 0, 0)
	If Not ProcessExists('2.exe') Then
		$fWork = False
	EndIf
EndFunc   ;==>_getStat
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Я бы еще дополнил
Код:
Func _getStat()
    $read = StdoutRead($prog_id)
    GUICtrlSetData($Edit1, GUICtrlRead($Edi1) & $read, 'edit')
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Kaster
ИМХО, в данном случае так проще:
Код:
$read = StdoutRead($prog_id, True)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
madmasles [?]
ИМХО, так проще:
чем проще? если буфер не высвобождать, то при большом объеме текста могут начаться глюки
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Kaster [?]
то при большом объеме текста могут начаться глюки
Абсолютно с Вами согласен, про проще - это относится только к конкретному данному случаю. Не думаю, что NoMad73rus передает гигабайты текста. :smile:
 
Верх