Что нового

Помогите с логикой и записью циклов

Iga

Новичок
Сообщения
6
Репутация
0
Всем привет!
Есть программа на java, её контролы не отслеживаются, текстов скрытых и явных не видно, только Title и Class.
Программа во время работы в основном окне генерирует лог. Текст можно скопировать в буфер.

Моя логика такая - копировать данные из лога, вставлять их в файл, загонять его построчно в массив, после чего отслеживать появление фразы "Программа завершила работу", если не найдено, то снова копировать данные из лога и т.д. Если совпадение фразы найдено закрыть окно с прогой.

Отдельно у меня получилось:
1. раз в 5 секунд копировать лог через send и записывать в файл.
2. Загонять содержимое файла в массив и искать в строках искомую фразу.

А вот правильно организовать циклы не могу, даже не могу объяснить что происходит, оно как будто живёт своей жизнью :smile: Но в основном либо не выходит из цикла, либо наоборот отрабатывает один раз и всё.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
приведите свой код
 
Автор
Iga

Iga

Новичок
Сообщения
6
Репутация
0
Сейчас как-то так, что уж я вчера пробовал за часов 5 не воспроизведу конешн.
Щас оно не работает, даже копирует какую-то хрень
код:
Local $aRecords
Sleep(10000)
WinActivate($handle)
Send("^a")
$bText = Send("^c")
MouseClick("primary", 400, 616, 1)
FileWrite (@ScriptDir & '\leftlog.txt', ClipGet())
$sText = FileRead(@ScriptDir & '\leftlog.txt') ;Читаем файл
$aRecords = StringSplit($sText, @CRLF, 1) ;Разбиваем текст на строки, строки помещаем в массив

If Not _FileReadToArray(@ScriptDir & '\leftlog.txt', $arecords) Then
    MsgBox(4096, "Ошибка", " Ошибка чтения файла в массив     Ошибка = " & @error)
    Exit
EndIf
For $i = 1 To $aRecords[0]
    ;MsgBox(4096, 'Строка:' & $i, $aRecords[$i])
    $stringResult = StringInStr($aRecords[$i], $sSearched)
    If $stringResult Then MouseClick("primary", 1130, 305, 1) ;тормозим работу
    Exit
Next
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
$handle = WinGetHandle("")
While 1
  Sleep(10000)
  WinActivate($handle)
  Send("^a")
  Send("^c")
  MouseClick("primary", 400, 616, 1)
  Sleep(333)
  If StringInStr(ClipGet(), "Программа завершила работу") Then
    MouseClick("primary", 1130, 305, 1)
    ExitLoop
  EndIf
WEnd
 
  • Like
Реакции: Iga
Автор
Iga

Iga

Новичок
Сообщения
6
Репутация
0
Код:
$handle = WinGetHandle("")
While 1
  Sleep(10000)
  WinActivate($handle)
  Send("^a")
  Send("^c")
  MouseClick("primary", 400, 616, 1)
  Sleep(333)
  If StringInStr(ClipGet(), "Программа завершила работу") Then
    MouseClick("primary", 1130, 305, 1)
    ExitLoop
  EndIf
WEnd
Благодарю. Получается что оно умеет искать прям в буфере, верно я понимаю?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Не прям в буфере, а в тексте, полученном из буфера.
 
Верх