Что нового

как дождаться определенной строки в окне и

mikzin

Новичок
Сообщения
80
Репутация
0
вот в окне программы окно лога (известен заголовок), там бегут строки,
надо дождаться определенной строки
"Initialization Sequence Completed"
и сделать что-то.

учитывая, что окно само сворачивается, когда закончено, но не закрывается.
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Код:
While 1
	Sleep(100) ; не слишком часто
	$sTaxt=ControlGetText ( "Заголовок окна", "", controlID ) ; controlID получить используя Au3Info.exe
	; If StringLeft($sText, 33)='Initialization Sequence Completed' Then MsgBox(0, 'Сообщение', 'Событие') ; это требует частой проверки
	If StringInStr($sText, 'Initialization Sequence Completed') Then ; проверяем вхождение строки, при условии что её не было
		MsgBox(0, 'Сообщение', 'Событие')
		ExitLoop
	EndIf
WEnd
 
Автор
M

mikzin

Новичок
Сообщения
80
Репутация
0
AZJIO, спасибо вам.

но всплыла проблема, когда окно скрыто в панели задач, данный код не работает.
видимо ControlGetText реагирует только на окна развернутые, или которые на виду.
как тут быть со свернутым окном? :(

Код:
$sText1=ControlGetText("OpenVPN Connection (mikzin)", "", 162) ; энто окно лога
; oтключение (часть строки)  "failed, will try again in 5 seconds"

While 1
    Sleep(12000)
    If StringInStr($sText1, 'failed, will try again in 5 seconds') Then 
    WinClose("µTorrent 2.0")
    ProcessClose ("openvpn.exe")
   ExitLoop
    EndIf
WEnd
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
mikzin
1. Меняет ли программа имя окна при сворачивании, если да, то изначально получить демскриптор и использовать его в дальнейшем вместо заголовка.
2. Пишется ли лог в свёрнутое окно.

ControlGetText работает со свёрнутыми окнами на 100%, проверено.

Пример с дескриптором

Код:
; Запуск калькулятора
Run('Calc.exe')

; Ожидание 5 секунд до появление окна калькулятора
$hWnd = WinWait("[CLASS:SciCalc]", "", 5) ; вместо [CLASS:SciCalc] может быть заголовок
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
EndIf

; вставляем текст
ControlCommand($hWnd, "", "Edit1", "EditPaste", 'Вставленный текст')
WinSetState($hWnd, "", @SW_MINIMIZE) ; сворачиваем
Sleep(700) ; ждём 0.7 сек, чтобы точно свернулось

; извлекаем текст
$Text = ControlGetText($hWnd, "", "Button22")
MsgBox(4096, 'Текст элемента', $Text)

; Закрывает калькулятор.
WinClose($hWnd)
 
Автор
M

mikzin

Новичок
Сообщения
80
Репутация
0
1. Меняет ли программа имя окна при сворачивании, если да, то изначально получить демскриптор и использовать его в дальнейшем вместо заголовка.
определенно нет.
2. Пишется ли лог в свёрнутое окно.
да, пишется.

ок, я понял кажется, окно не минимизировано в панель задач,
онo скрыто в трей, там только значок.
есть ли тут какой вариант решения?
 
Верх