Что нового

Помогите найти ошибку в скрипте с операцией выполняемой с определённой периодич

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Написал тестовый скрипт.
Код:
$timeint = 15000
$x = 0x026EDA
While 1
$begin = TimerInit()
        If TimerDiff($begin) > $timeint Then
        MouseClick("secondary", 894, 1006, 1, 0)
        Sleep ( '550' )
        MouseClick("primary", 594, 812, 1, 0)
        Sleep ( '550' )
        MouseClick("primary", 711, 133, 2, 0)
        Sleep ( '550' )
        MouseClick("primary", 1187, 422, 2, 0)
        Sleep ( '550' )
        Click_1()
        Sleep ( '550' )
    Else
        Click_1()
        Sleep ( '550' )
    EndIf   
WEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Func Click_1()
  $pi = PixelSearch(1180, 843, 1188, 851, $x, 5)
        If Not @error Then
        MouseClick("primary", 898, 762, 1, 0)
        Sleep ( '550' )
        MouseClick("primary", 894, 1006, 1, 0)
        Sleep ( '550' )
    Else
        MouseClick("primary", 904, 533, 1, 0)
        Sleep ( '550' )
        MouseClick("primary", 1189, 8, 1, 0)
        Sleep ( '550' )
    EndIf
EndFunc

Визуально его работа должна выглядеть так: Если в точке 1184, 847 цвет синий, то два клика,
если другой, то два клика в другом месте. Затем проверка прошло ли 15 секунд, если не прошло то повторить проверку цвета и два клика, если уже прошло то серия различных кликов. И так по бесконечному циклу.

Работает она только по циклу Func Click_1(), а на интервалы времени внимание не обращает.

Визуально это должно быть сворачивание/разворачивание блокнота, и раз в 15 секунд закрытие и открытие его, всё при помощи мыши. А скрипт просто сворачивает/разворачивает блокнот. Это так для информации. Схемы с WinActive/WinCloze пока не интересуют, я с циклами пытаюсь разобраться.
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
Кайгородов В. Ю.
Я точно с таймерам не работал, не знаю как оно там...но в части цикла:
Код:
Else
        Click_1(); <<== убрать надо.
        Sleep ( '550' )
    EndIf

у вас ошибка! А именно идет проверка на прошло ли 15сек, если да, то вызывается Func Click_1(), а если не прошло, то ОПЯТЬ вызывается Func Click_1().
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Кайгородов В. Ю.
Код:
While 1
$begin = TimerInit()
      MsgBox(0,'',TimerDiff($begin))
Sleep(100)
WEnd
 
Автор
К

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
У меня оказывается цикл завершался до истечения 15 секунд и условие Then не наступало.
Код:
$timeint = 15000
$x = 0x026EDA
While 1
$begin = TimerInit()
    Do
        Click_1()
        Sleep ( '550' )
    Until TimerDiff($begin) > $timeint
        MouseClick("secondary", 894, 1006, 1, 0)
        Sleep ( '550' )
        MouseClick("primary", 594, 812, 1, 0)
        Sleep ( '550' )
        MouseClick("primary", 711, 133, 2, 0)
        Sleep ( '550' )
        MouseClick("primary", 1187, 422, 2, 0)
        Sleep ( '550' )
WEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func Click_1()
  $pi = PixelSearch(1180, 843, 1188, 851, $x, 5)
        If Not @error Then
        MouseClick("primary", 898, 762, 1, 0)
        Sleep ( '550' )
        MouseClick("primary", 894, 1006, 1, 0)
        Sleep ( '550' )
    Else
        MouseClick("primary", 904, 533, 1, 0)
        Sleep ( '550' )
        MouseClick("primary", 1189, 8, 1, 0)
        Sleep ( '550' )
    EndIf
EndFunc

Ура!!! Нашёл рабочее решение.
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
sngr
Прокомментируйте пожалуйста, что вы хотели этим примером показать?!
Или я чего-то не понял, или в данном примере смысла нет никакого...
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Странно.. Вроде очевидно. ТС в своём коде имеет условие: If TimerDiff($begin) > 15000. В месте условия я поставил msgbox, дабы визуализировать разницу во времени между TimerInit() и TimerDiff. Скажи мне любезный, когда TimerDiff($begin) будет больше 15000?
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
sngr [?]
я поставил msgbox, дабы визуализировать разницу во времени между TimerInit() и TimerDiff
Ну, разница то видна, таймер растет, но какой смысл вы хотели донести до ТС?
Я, в программировании, по большому счету даже не новичок, я вообще не шарю в этом деле, и скорее всего построил бы код так-же как и ТС, но то решение которое предлагаете вы, мне увы не понятно. Ибо нет условий и TimerDiff($begin) будет постоянно увеличиваться...? Я правильно рассуждаю?
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
В том то и дело, что рассуждаешь ты неправильно и таймер расти не будет.
Код:
For $i=0 To 10
$begin = TimerInit()
     ConsoleWrite(TimerDiff($begin)&@CRLF)
Sleep(1000)
Next

Вот, совсем наглядно. Я пытаюсь от вас добиться понимания того, что именно происходит и почему код у ТС неверный. Цикл - это конечное или бесконечное повторение -
Код:
$begin = TimerInit()
ConsoleWrite(TimerDiff($begin)&@CRLF)
Sleep(1000)
$begin = TimerInit()
ConsoleWrite(TimerDiff($begin)&@CRLF)
Sleep(1000)

Скажи мне, почему таймер не увиличивается?
 

mr.Gbabak

Осваивающий
Сообщения
257
Репутация
23
sngr
Ааага ;D я понял!!! Спасибо большое!!!
 
Автор
К

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Так и непонял, что такое ТС, не силён в программистском сленге (технический скрипт или как?).
 
Автор
К

Кайгородов В. Ю.

В универе только TurboBASIC изучал и то забыл уже
Сообщения
25
Репутация
0
Нашёл: Топикстартер - так называется тот пользователь форума, которым был начат топик. То есть он добавил тему – первый пост в топике.
 
Верх