Что нового

[Автоматизация] Выполнение операций до совпадения по цвету в заданных координатах

Redcut

Новичок
Сообщения
12
Репутация
0
Здравствуйте.
Извините, что так часто обращаюсь, но снова требуется помощь бывалых в написании функции.

Версия AutoIt:
3.3.8.1

Описание:
Имеются 16-ть ячеек с центрами в заданных координатах.
Требуется обойти все 16-ть ячеек и при не совпадении с заданным цветом выполнить двойной щелчок; также при достижении последней ячейки проверить контрольную область на изменение цвета и выполнить одинарный щелчок, если цвет отличается от заданного, после чего снова обойти все 16-ть ячеек до того момента, когда совпадёт заданный цвет пустой ячейки или цвет контрольной области.

Цвет пустой ячейки по заданным координатам: 0x1F1F1F.
Цвет НЕ ПУСТОЙ ячейки: любой, отличный от предыдущего.
Цвет не активной контрольной области по заданным координатам: 0x1D1D1D.
Цвет АКТИВНОЙ контрольной области: 0x97C0E3

Если это важно, то ячейки расположены в четыре ряда, по четыре ячейки в каждом ряду; счёт начинается и продолжается слева - направо.

Как это мне видится:
1) Перемещаем курсор по координатам n-ой ячейки;
1.1) Если цвет по координатам отличается от цвета пустой ячейки, то выполняем двойной щелчок;
1.1.1) Переходим пункту 1.
1.2) Если цвет по координатам совпадает с цветом пустой ячейки, то завершаем работу функции.
1.3) Если таким макаром дошли до последней - 16-ой ячейки - переводим курсор в контрольную область;
1.3.1) Если цвет по координатам отличается от цвета неактивной контрольной области, то выполняем одинарный щелчок;
1.3.1.1) Переходим к пункту 1.
1.3.2) Если цвет по координатам совпадает с цветом неактивной контрольной области, то завершаем работу функции.

Примечание:
Функцию обхода ячеек планирую вызывать из уже работающей функции.
Как я понял, при вызове текущая функция "застывает" пока не отработает вызванная.

Func FunctionName1()
...
Call ("FunctionName2")
....
EndFunc

Координаты ячеек.
Пока что крутится такое убожество и производятся клики в пустоту.
Остальное пока что худо-бедно работает.
Код:
MouseClick ( "Left" , 580, 280, 2) ; двойной клик в первую ячейку
Sleep(500)
MouseClick ( "Left" , 680, 280, 2) ; двойной клик во вторую ячейку
Sleep(500)
MouseClick ( "Left" , 780, 280, 2) ; двойной клик в третью ячейку
Sleep(500)
MouseClick ( "Left" , 880, 280, 2) ; двойной клик в четвёртую ячейку
Sleep(500)
MouseClick ( "Left" , 580, 380, 2) ; двойной клик в пятую ячейку
Sleep(500)
MouseClick ( "Left" , 680, 380, 2) ; двойной клик в шестую ячейку
Sleep(500)
MouseClick ( "Left" , 780, 380, 2) ; двойной клик в седьмую ячейку
Sleep(500)
MouseClick ( "Left" , 880, 380, 2) ; двойной клик в восьмую ячейку
Sleep(500)
MouseClick ( "Left" , 580, 480, 2) ; двойной клик в девятую ячейку
Sleep(500)
MouseClick ( "Left" , 680, 480, 2) ; двойной клик в десятую ячейку
Sleep(500)
MouseClick ( "Left" , 780, 480, 2) ; двойной клик в одиннадцатую ячейку
Sleep(500)
MouseClick ( "Left" , 880, 480, 2) ; двойной клик в двенадцатую ячейку
Sleep(500)
MouseClick ( "Left" , 580, 580, 2) ; двойной клик в тринадцатую ячейку
Sleep(500)
MouseClick ( "Left" , 680, 580, 2) ; двойной клик в четырнадцатую ячейку
Sleep(500)
MouseClick ( "Left" , 780, 580, 2) ; двойной клик в пятнадцатую ячейку
Sleep(500)
MouseClick ( "Left" , 880, 580, 2) ; двойной клик в шестнадцатую ячейку
...
MouseClick ( "Left" , 920, 645, 1) ; клик в контрольную область


Спасибо, если кто поможет.
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,445
Код:
HotKeySet("{esc}", "quit")

Global $Coords[16][2] = [[580, 280],[680, 280],[780, 280],[880, 280],[580, 380],[680, 380],[780, 380],[880, 380], _
                         [580, 480],[680, 480],[780, 480],[880, 480],[580, 580],[680, 580],[780, 580],[880, 580]]
Global $Contr[2] = [920, 645], $EmptyColor = 0x1F1F1F, $NotActiveColor = 0x1D1D1D

FunctionName2()

Func FunctionName2()
  Do
    For $i = 0 To UBound($Coords) - 1
      If PixelGetColor($Coords[$i][0], $Coords[$i][1]) <> $EmptyColor Then
        MouseClick("left", $Coords[$i][0], $Coords[$i][1], 2)
      Else
        Return
      EndIf
    Next
    If PixelGetColor($Contr[0], $Contr[1]) <> $NotActiveColor Then
      MouseClick("left", $Contr[0], $Contr[1])
    Else
      Return
    EndIf
  Until 0
EndFunc

Func quit()
  Exit
EndFunc
 
Верх