Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Поиск статичных точек на кнопках и не только
DarkMaster
сообщение 25.12.2013, 9:10
Сообщение #1


***********

Модератор UOPilot
Сообщений: 9.465
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27680
Пользователь №: 11.279



Часто кнопки подсвечиваются при наведении на них. Но несмотря на это, на них зачастую есть статичные цвета. Чтобы не писать диапазоны или не раздувать if'ы, можно поискать не изменяющиеся цвета и их координаты. Собственно код:
Скрипт
Код
set linedelay 0
set #dev 1
if  #dev = 1
    log close
    log clear
    log mode noScript
    set #handleLogWindow findwindow ("Log Window")
    showwindow #handleLogWindow show
    log open 1 -10 500 300
    set #handleUoPilot findwindow ("UoPilot")
end_if
set $bmp ".bmp"

log Наведите на целевое окно и нажмите ctrl+A.
log Окно будет испозовано только,
log как точка начала отсчета относительных координат.
set workwindow 0
while workwindow = 0
    wait 100
end_while
set #workwindow workwindow

log
log Наведите на ЛЕВЫЙ ВЕРХНИЙ левый угол
log анализируемого объекта и нажмите ctrl+A.
set workwindow 0
while workwindow = 0
    wait 50
end_while
get mouse_pos #startX #startY
log
log Наведите на ПРАВЫЙ НИЖНИЙ угол
log анализируемого объекта и нажмите ctrl+A.
log После чего НЕ перемещайте курсор.
set workwindow 0
while workwindow = 0
    showwindow #handleUoPilot show  
    wait 50
end_while
get mouse_pos #endX #endY

:start
    for #i #startX #endX 1
        for #j #startY #endY 1
            get color #c #i #j
            set %arr1 [ #i #j ] #c
        end_for
        log дипазон строк: #startX #endX текущая строка: #i
    end_for
    set #lastWorkwindow workwindow
    log
    log Теперь убрете кусор с анализируемого объекта  и
    log нажмите ctrl+A для продолжения.
    set workwindow 0
    while workwindow = 0
        alarm
    end_while
    for #i #startX #endX 1
        for #j #startY #endY 1
            get color #c #i #j
            set %arr2 [ #i #j ] #c
        end_for
        log дипазон строк: #startX #endX текущая строка: #i
    end_for
    log clear
    log Статичные точки:
    for #i #startX #endX 1
        for #j #startY #endY 1
            if  %arr1 [ #i #j ] = %arr2 [ #i #j ]
                log #i   #j   %arr1 [ #i #j ]
            end_if
        end_for
    end_for
    stop_script
goto start

stop_script


Сообщение отредактировал DarkMaster - 25.12.2013, 9:14


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 25.6.2016, 2:51
Сообщение #2


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Чуть подправил. Убрал не нужные строки, исправил установку размера лога. Версия пилота 2.37 или выше.
Скрипт
Код
set linedelay 0
log clear
log open
log mode compact
set windowpos 0 0 400 300 loghandle

log Наведите на ЛЕВЫЙ ВЕРХНИЙ угол
log анализируемого объекта и нажмите ctrl+A.
set workwindow 0
while workwindow = 0
    showwindow windowhandle
    wait 50
end_while
get mouse_pos #startX #startY
log
log Наведите на ПРАВЫЙ НИЖНИЙ угол
log анализируемого объекта и нажмите ctrl+A.
log После чего НЕ перемещайте курсор.
set workwindow 0
while workwindow = 0
    showwindow windowhandle
    wait 50
end_while
get mouse_pos #endX #endY

for #i #startX #endX 1
    for #j #startY #endY 1
        get color #c #i #j
        set %arr1 [ #i #j ] #c
    end_for
    log Диапазон строк: #startX #endX текущая строка: #i
end_for

log
log Теперь уберите курсор с анализируемого объекта  и
log нажмите ctrl+A для продолжения.
set workwindow 0
while workwindow = 0
    alarm
    wait 50
end_while
for #i #startX #endX 1
    for #j #startY #endY 1
        get color #c #i #j
        set %arr2 [ #i #j ] #c
    end_for
    log Диапазон строк: #startX #endX текущая строка: #i
end_for
log clear
log Статичные точки (X Y Color):
for #i #startX #endX 1
    for #j #startY #endY 1
        if  %arr1 [ #i #j ] = %arr2 [ #i #j ]
            log #i   #j   %arr1 [ #i #j ]
        end_if
    end_for
end_for
End_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 24.3.2017, 2:18
Сообщение #3


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26702
Пользователь №: 16.971
Возраст: 29



Теперь вместо if используется findcolor. Проверял только в версии 2.39.
Скрипт
Код
set linedelay 0
log close
log clear
log mode compact
set #hint1 0

set workwindow 0
while workwindow = 0
    set #handle getwindow (0)
    if  #handle != WindowHandle
        set windowpos -1 -1 -1 1 WindowHandle
    end_if
    if  #hint1 = 0
        if  mouseposabs_x > 499 and mouseposabs_x < 1000 and mouseposabs_y > 499 and mouseposabs_y < 600
            hint (20 clRed 0 0 (Указать левый верхний угол картинки\nНажать Ctrl+ A))
            set #hint1 1
        else
            hint (20 clRed 500 500 (Указать левый верхний угол картинки\nНажать Ctrl+ A))
        end_if
    else
        if  mouseposabs_x < 500 and mouseposabs_y < 100
            hint (20 clRed 500 500 (Указать левый верхний угол картинки\nНажать Ctrl+ A))
            set #hint1 0
        else
            hint (20 clRed 0 0 (Указать левый верхний угол картинки\nНажать Ctrl+ A))
        end_if
    end_if
    wait 100
end_while
get mouse_pos #startX #startY

set workwindow 0
while workwindow = 0
    set #handle getwindow (0)
    if  #handle != WindowHandle
        set windowpos -1 -1 -1 1 WindowHandle
    end_if
    if  #hint1 = 0
        if  mouseposabs_x > 499 and mouseposabs_x < 1000 and mouseposabs_y > 499 and mouseposabs_y < 600
            hint (20 clRed 0 0 (Указать правый нижний угол картинки\nНажать Ctrl+ A))
            set #hint1 1
        else
            hint (20 clRed 500 500 (Указать правый нижний угол картинки\nНажать Ctrl+ A))
        end_if
    else
        if  mouseposabs_x < 500 and mouseposabs_y < 100
            hint (20 clRed 500 500 (Указать правый нижний угол картинки\nНажать Ctrl+ A))
            set #hint1 0
        else
            hint (20 clRed 0 0 (Указать правый нижний угол картинки\nНажать Ctrl+ A))
        end_if
    end_if
    wait 100
end_while
get mouse_pos #endX #endY
set #a findcolor(#startX #startY #endX #endY (0-16777215) %arr1)

set workwindow 0
while workwindow = 0
    set #handle getwindow (0)
    if  #handle != WindowHandle
        set windowpos -1 -1 -1 1 WindowHandle
    end_if
    if  #hint1 = 0
        if  mouseposabs_x > 499 and mouseposabs_x < 1000 and mouseposabs_y > 499 and mouseposabs_y < 600
            hint (20 clRed 0 0 (Убрать курсор с объекта\nи нажать Сtrl+A)))
            set #hint1 1
        else
            hint (20 clRed 500 500 (Убрать курсор с объекта\nи нажать Сtrl+A))
        end_if
    else
        if  mouseposabs_x < 500 and mouseposabs_y < 100
            hint (20 clRed 500 500 (Убрать курсор с объекта\nи нажать Сtrl+A))
            set #hint1 0
        else
            hint (20 clRed 0 0 (Убрать курсор с объекта\nи нажать Сtrl+A))
        end_if
    end_if
    wait 100
end_while
hint (10 clblack 1920 0 (1))

set #b findcolor(#startX #startY #endX #endY (0-16777215) %arr2)
if  size(%arr1) > 0 and size(%arr2) > 0
    log open 0 0 400 300
    log Статичные точки (X Y Color):
    for #i 1 size(%arr1)
        if  %arr1 [#i 3] = %arr2 [#i 3]
            set #z #z + 1
            log  #z)   %arr1 [#i 1] %arr1 [#i 2] %arr1 [#i 3]
        end_if
    end_for
    log
    log Проверено точек: #a
    Log Из них статичные: #z
end_if
End_script

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vik_777
сообщение 19.4.2017, 18:14
Сообщение #4


**

Neophyte
Сообщений: 48
Регистрация: 3.10.2016
Группа: Пользователи
Наличность: 0
Пользователь №: 18.140
Возраст: 40



//переработал под себя ПИЛОТ вер 2.38
move 1438, 150 abs
set WorkWindow WindowFromCursor
showwindow TOP

set linedelay 0
log clear
log open
log mode compact
set windowpos 1800 0 400 300 loghandle // лог на второй монитор
// ручками
set #startX 254 // УКАЗЫВАЕМ начало X
set #startY 89 // Y
set #endX 258 // УКАЗЫВАЕМ конец X
set #endY 95 // Y

for #i #startX #endX 1
for #j #startY #endY 1
get color #c #i #j abs // всегда забываю об абсолютных корах
set %arr1 [ #i #j ] #c
end_for
end_for // создали массив 2
hint (20 clRed 150 400 (КРУТИМ))
move 487, 53 abs //
wait 3000
for #i #startX #endX 1
for #j #startY #endY 1
get color #c #i #j abs
set %arr2 [ #i #j ] #c
end_for
end_for // создали массив 2
log clear

for #i #startX #endX 1
for #j #startY #endY 1
if %arr1 [ #i #j ] = %arr2 [ #i #j ] // сравниваем массивы
log #i #j %arr1 [ #i #j ] // выводим совпавшие точки
end_if
end_for
end_for
End_script

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 19.4.2024, 8:36
Designed by Nickostyle