Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot _ Вопрос по рабочим столам в Win10

Автор: Glosha 4.8.2019, 14:16

День добрый!
Вопрос по рабочим столам в Win10.
Подскажите пожалуйста, а можно эмулировать в кликере перетаскивание окна на рабочий стол 2,3 и тп?

Автор: Fors1k 4.8.2019, 23:53

код
Код
set #ld linedelay
set linedelay 40
//
set #cw 1 // номер рабочего стола, в котором сейчас находится окно.
set #tw 4 // в какой стол переместить
set workwindow 394820 // окно, которое будем перемещать
//
showwindow workwindow
if #cw < #tw
set #a 2
else
set #a 1
end_if
sendex_down {WindowsLeft}{Tab}
sendex_up {WindowsLeft}{Tab}
wait 350
sendex_down ~{F10}
sendex_up ~{F10}
wait 15
sendex {Down}
sendex {Down}
sendex {Down}
sendex {Right}
repeat #tw - #a
sendex {Down}
end_repeat
sendex {Enter}
sendex {Escape}
set linedelay #ld
end_script

Автор: Glosha 5.8.2019, 10:20

Цитата(Fors1k @ 4.8.2019, 23:53) *

код
Код
set #ld linedelay
set linedelay 40
//
set #cw 1 // номер рабочего стола, в котором сейчас находится окно.
set #tw 4 // в какой стол переместить
set workwindow 394820 // окно, которое будем перемещать
//
showwindow workwindow
if #cw < #tw
set #a 2
else
set #a 1
end_if
sendex_down {WindowsLeft}{Tab}
sendex_up {WindowsLeft}{Tab}
wait 350
sendex_down ~{F10}
sendex_up ~{F10}
wait 15
sendex {Down}
sendex {Down}
sendex {Down}
sendex {Right}
repeat #tw - #a
sendex {Down}
end_repeat
sendex {Enter}
sendex {Escape}
set linedelay #ld
end_script


Спасибо огромное!

Автор: Glosha 5.8.2019, 14:43

Цитата(Fors1k @ 4.8.2019, 23:53) *

код
Код
set #ld linedelay
set linedelay 40
//
set #cw 1 // номер рабочего стола, в котором сейчас находится окно.
set #tw 4 // в какой стол переместить
set workwindow 394820 // окно, которое будем перемещать
//
showwindow workwindow
if #cw < #tw
set #a 2
else
set #a 1
end_if
sendex_down {WindowsLeft}{Tab}
sendex_up {WindowsLeft}{Tab}
wait 350
sendex_down ~{F10}
sendex_up ~{F10}
wait 15
sendex {Down}
sendex {Down}
sendex {Down}
sendex {Right}
repeat #tw - #a
sendex {Down}
end_repeat
sendex {Enter}
sendex {Escape}
set linedelay #ld
end_script


подскажи еще пожалуйста... мне нужно запустить продолжение скрипта в нужно время: например запустил скрипт в любое удобное время, а он в 10 утра продолжил исполнять скрипт дальше.

Автор: cirus 5.8.2019, 15:08

Цитата
запустил скрипт в любое удобное время, а он в 10 утра продолжил исполнять скрипт дальше.

Код
while hour != 10 or min != 0  // ждать когда будет 10 часов 0 минут
    wait 10
end_while
// дальше скрипт
end_script

Автор: Glosha 5.8.2019, 15:15

Цитата(cirus @ 5.8.2019, 15:08) *

Код
while hour != 10 or min != 0  // ждать когда будет 10 часов 0 минут
    wait 10
end_while
// дальше скрипт
end_script


Спасибо!

Автор: Glosha 5.8.2019, 19:08

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

Автор: Fors1k 5.8.2019, 19:46

Цитата(Glosha @ 5.8.2019, 19:08) *

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

Нюансы такого плана ты можешь узнать в вики.
https://uopilot.tati.pro/index.php?title=Wait

Код
Wait 3h

Автор: FREEON 6.8.2019, 0:38

Цитата(Fors1k @ 5.8.2019, 19:46) *

Нюансы такого плана Вы можете узнать в вики.
https://uopilot.tati.pro/index.php?title=Wait

Код
Wait 3h


Помоему такого формата не работает, нужно переводить в минуты, секунды или милесекунды... Но могу и ошибаться далёко от пк что бы проверить.

Автор: Glosha 6.8.2019, 10:17

Цитата(FREEON @ 6.8.2019, 0:38) *

Помоему такого формата не работает, нужно переводить в минуты, секунды или милесекунды... Но могу и ошибаться далёко от пк что бы проверить.

у меня такой формат не работает ... 180m работает

Автор: Fors1k 6.8.2019, 22:46

В описании на вики такой формат указан, но он, оказывается, и правда не работает. Значит в следующей версии по идее исправят.

Автор: Glosha 7.8.2019, 15:05

Цитата(Fors1k @ 4.8.2019, 23:53) *

код
Код
set #ld linedelay
set linedelay 40
//
set #cw 1 // номер рабочего стола, в котором сейчас находится окно.
set #tw 4 // в какой стол переместить
set workwindow 394820 // окно, которое будем перемещать
//
showwindow workwindow
if #cw < #tw
set #a 2
else
set #a 1
end_if
sendex_down {WindowsLeft}{Tab}
sendex_up {WindowsLeft}{Tab}
wait 350
sendex_down ~{F10}
sendex_up ~{F10}
wait 15
sendex {Down}
sendex {Down}
sendex {Down}
sendex {Right}
repeat #tw - #a
sendex {Down}
end_repeat
sendex {Enter}
sendex {Escape}
set linedelay #ld
end_script



Обновился на вин 1903 и перестало работать, после вин +таб не прожимает выбора стола

Автор: Fors1k 7.8.2019, 16:36

Цитата(Glosha @ 7.8.2019, 15:05) *

Обновился на вин 1903 и перестало работать, после вин +таб не прожимает выбора стола

Попробуй этот
в первой строке: откуда куда окно
Код
call vDesktop 1 2 5116634
end_script
proc vDesktop #iz #v #handle
set linedelay 0
set workwindow #handle
showwindow workwindow
sendex_down {WindowsLeft}{Tab}
sendex_up {WindowsLeft}{Tab}
if  #iz < #v
set #a 2
else
set #a 1
end_if
wait 400
sendex_down ~{F10}
sendex_up ~{F10}
sendex {Down}
sendex {Down}
sendex {Down}
sendex {Right}
repeat #v - #a
sendex {Down}
end_repeat
sendex {Enter}
sendex {Escape}
end_proc

Этот работает побыстрее.
Если не срабатывает, то прибавляй к вэйту по 10, и пробуй, пока не заработает. У всех разная скорость анимации, тебе надо подобрать свою, что бы он успевал.
Лучше подбирать на самом дальнем столе, из всех, которые будут использоваться. Чем дальше стол, из которого нужно перетащить окно, тем больше нужен вэйт. У меня для 8го стола вышло 400мс для безошибочной работы. То есть, если у тебя 3 стола, то подбирай для третьего, и т.д..

Автор: Glosha 7.8.2019, 17:21

Цитата(Fors1k @ 7.8.2019, 16:36) *

Попробуй этот
в первой строке: откуда куда окно
Код
call vDesktop 1 2 5116634
end_script
proc vDesktop #iz #v #handle
set linedelay 0
set workwindow #handle
showwindow workwindow
sendex_down {WindowsLeft}{Tab}
sendex_up {WindowsLeft}{Tab}
if  #iz < #v
set #a 2
else
set #a 1
end_if
wait 400
sendex_down ~{F10}
sendex_up ~{F10}
sendex {Down}
sendex {Down}
sendex {Down}
sendex {Right}
repeat #v - #a
sendex {Down}
end_repeat
sendex {Enter}
sendex {Escape}
end_proc

Этот работает побыстрее.
Если не срабатывает, то прибавляй к вэйту по 10, и пробуй, пока не заработает. У всех разная скорость анимации, тебе надо подобрать свою, что бы он успевал.
Лучше подбирать на самом дальнем столе, из всех, которые будут использоваться. Чем дальше стол, из которого нужно перетащить окно, тем больше нужен вэйт. У меня для 8го стола вышло 400мс для безошибочной работы. То есть, если у тебя 3 стола, то подбирай для третьего, и т.д..


выскакивает в самом начале

ps. фиксанул твой старый код, там лишний "sendex {Down}" был, просто стояла без задержек и не успевал сообразить, что происходило.


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Fors1k 7.8.2019, 18:20

Цитата(Glosha @ 7.8.2019, 17:21) *

выскакивает в самом начале

Не все строки скопировал.
Код
end_proc

Он просит эту строку в конце.

Автор: FREEON 7.8.2019, 18:40

Цитата(Glosha @ 7.8.2019, 17:21) *

ps. фиксанул твой старый код, там лишний down был, просто стояла без задержек и не успевал сообразить, что происходило.

желательно еще определиться с pid процесса(окна)

Автор: Fors1k 7.8.2019, 18:49

Цитата(Glosha @ 7.8.2019, 17:21) *
..., там лишний down был, просто стояла без задержек и не успевал сообразить, что происходило.

Поздравляю, что все заработало)

Автор: DarkMaster 9.8.2019, 18:31

Цитата
подскажите, а есть ограничения на команды wait ? ну например мне нужно 3 часа ожидания... или лучше такие промежутки заводить через таймер?

Они есть и не очень большие. То ли 3 то ли 4 с чем-то часа. Связано, как я подозреваю, с переполнением переменной. Чтобы избежать таких проблем при больших задержках используйте циклы, как приведено выше.

Автор: Fors1k 9.8.2019, 19:24

Цитата(DarkMaster @ 9.8.2019, 18:31) *
Связано, как я подозреваю, с переполнением переменной.

Wait - это int? Получается он может вместить ~2.15 млрд мс, что равно ~600 часов. Значит даже wait 596h должно работать, разве нет? В описании у вэйта есть параметр h, но чет он сломался.

Автор: WKnight 10.8.2019, 1:10

Похоже со времен написания wait, символ h был зарезервирован. Скорее всего для указания шестнадцатеричного формата чисел. И wait так невзначай отвалился...

Автор: DarkMaster 10.8.2019, 9:32

Цитата
Wait - это int? Получается он может вместить ~2.15 млрд мс, что равно ~600 часов. Значит даже wait 596h должно работать, разве нет?

Практику говорю. В промежутке 3-5 часов есть предел. Вариантов кроме переполнения я особо не вижу. Может у него внутренний счетчик циклов какой-нибудь сделан в виде short, как вариант. Может кстати фикс уже был, т.к. я об этом уже писал.

Автор: Glosha 14.8.2019, 17:29

помогите пожалуйста с циклом...

Код

set #d findcolor (1164, 740 1164, 742 1 1 (3798088-4387912) %arr 2 -1 3 abs)
if #d > 0
  wait 2000
else
  log Цвет не найден!
end_if

мне нужно зациклить вот эту часть кода
Код

set #d findcolor (1164, 740 1164, 742 1 1 (3798088-4387912) %arr 2 -1 3 abs)
if #d > 0
  wait 2000

и продолжить, когда не найдет цвет

Автор: FREEON 14.8.2019, 22:50

Цитата(Glosha @ 14.8.2019, 17:29) *

помогите пожалуйста с циклом...мне нужно зациклить часть кода и продолжить, когда не найдет цвет

Код

set #d findcolor (1164, 740 1164, 742 1 1 (3798088-4387912) %arr 2 -1 3 abs)
while #d > 0
    set #d findcolor (1164, 740 1164, 742 1 1 (3798088-4387912) %arr 2 -1 3 abs)
    wait 2000
    if  #d = 0
        log Цвет не найден!
    end_if
end_while

Автор: Glosha 15.8.2019, 0:26

Спасибо!

Автор: Glosha 15.8.2019, 13:47

тут разобрался.
еще пару вопросов:

а команда "set #d findcolor" работает в перекрытом окне?
у меня одного не возвращает курсор после клика? (в настройках стоит галка, возвращать)

Автор: Fors1k 15.8.2019, 18:15

• set workwindow 6573546
• set workwindow windowfromcursor
• set workwindow findwindow (Блокнот)

Цитата(Glosha @ 15.8.2019, 13:47) *

а команда "set #d findcolor" работает в перекрытом окне?

https://uopilot.tati.pro/index.php?title=Findcolor

Автор: Glosha 15.8.2019, 18:23

Цитата(Fors1k @ 15.8.2019, 18:15) *

• set workwindow 6573546
• set workwindow windowfromcursor
• set workwindow findwindow (Блокнот)


https://uopilot.tati.pro/index.php?title=Findcolor

"Работа с перекрытым окном: Да. Привязка к окну обязательна."
но у меня не срабатывает, может, что-то не то делаю? если поверх, что-то есть "цвет не найден".
Код
set #handle findwindow ("Manager")  // найти окно 
set workwindow #handle              // сделать его рабочим
set windowpos 3383, 515
wait 2000      
kleft 3815, 560 abs
wait 8m
set #d findcolor (3815, 560 3815, 562 1 1 (3798088-4387912) %arr 2 -1 3 abs)
while #d > 0
    set #d findcolor (3815, 560 3815, 562 1 1 (3798088-4387912) %arr 2 -1 3 abs)
    wait 10000
    if  #d = 0
        log Цвет не найден!
    end_if
end_while
end_script

Автор: Fors1k 15.8.2019, 18:34

Цитата(Glosha @ 15.8.2019, 18:23) *

"Работа с перекрытым окном: Да. Привязка к окну обязательна."
но у меня не срабатывает, может, что-то не то делаю? если поверх, что-то есть "цвет не найден".

Все верно, если указан параметр abs, то искать будет только в видимой области, то есть в перекрытом окне не найдет. Замени abs на workwindow.

Автор: Glosha 16.8.2019, 9:48

Цитата(Fors1k @ 15.8.2019, 18:34) *

Все верно, если указан параметр abs, то искать будет только в видимой области, то есть в перекрытом окне не найдет. Замени abs на workwindow.

спасибо! подскажи, а у тебя работает функция "вернуть курсор назад после клика"? а можно еще указать на каком рабочем столе искать цвет?

Автор: Fors1k 16.8.2019, 13:58

Цитата(Glosha @ 16.8.2019, 9:48) *

спасибо! подскажи, а у тебя работает функция "вернуть курсор назад после клика"? а можно еще указать на каком рабочем столе искать цвет?

Про "вернуть курсор назад после клика" не подскажу, так как никогда не пользовался им, не знаю как и после чего он должен вернуть курсор. Кто-нибудь из ребят, думаю, подскажет.
Если срочно, то:
get mouse_pos #x0 #y0 // позиция до клика
kleft 100 200 // клик
move #x0 #y0 // возврат

Цвет, если я не ошибаюсь, пилот сможет искать только на том столе, который сейчас активен.

Автор: Glosha 16.8.2019, 14:13

Цитата(Fors1k @ 16.8.2019, 13:58) *

Про "вернуть курсор назад после клика" не подскажу, так как никогда не пользовался им, не знаю как и после чего он должен вернуть курсор. Кто-нибудь из ребят, думаю, подскажет.
Если срочно, то:
get mouse_pos #x0 #y0 // позиция до клика
kleft 100 200 // клик
move #x0 #y0 // возврат

Цвет, если я не ошибаюсь, пилот сможет искать только на том столе, который сейчас активен.

в пилоте есть функция возврата в настройках, но она не работает. хз, может только у меня

Автор: cirus 16.8.2019, 14:25

Цитата
в пилоте есть функция возврата в настройках, но она не работает

Запустить пилот от админа.

Автор: Glosha 16.8.2019, 14:43

Цитата(cirus @ 16.8.2019, 14:25) *

Запустить пилот от админа.

запущен, не помогает

Автор: Glosha 17.8.2019, 19:25

помогите пожалуйста с циклом, для меня слишком сложное решение...
пример:
есть 6 точек координат(условий), по ним нужно проверить соответствие цвета, если на 1 из них не найден цвет сделать клик, но клин нужен только внутри каждого условия отдельный и так зациклить пока не будет все 6 не соответствий. клик нужно делать только 1 раз после первого отказа в цвете.

Автор: Fors1k 17.8.2019, 21:13

Код
set delimiter ' '
init_arr %a (1) "1, 2 3, 4" "5, 6 7, 8" "9, 10 11, 12" "13, 14 15, 16" "17, 18 19, 20" "21, 22 23, 24"
while size(%a[1]) > 0
for #i 1 size(%a[1])
    set $a %a[1 #i]
    set #a findcolor ($a 1 1 (3798088-4387912) %arr 2 -1 3 workwindow)
    if  #a = 0
        kleft x y
        delete_array %a #i
        break
    end_if
end_for
end_while
end_script

В массиве задай координаты всех точек

Автор: FREEON 17.8.2019, 21:28

ну либо более простой вариант(азы так сказать)

Код

while_not 450, 160 255 and 480, 160 255 // повторяем цикл пока во всех точкаx 1 и 2 не получим желаемый цвет
//точка 1 цвет известен но он нам не подходит, нужно сделать клик
if 450, 160 16777215 //если есть цвет координаты в точке 1 и цвет X, Y Color
    left 450, 160    //куда нужно кликнуть в точке 1
    wait 100
end_if
wait 100
//точка 2, цвет в данный момент не известен, но знаем кокой он должен получится в итоге. Делаем до тех пор пока не будет нужный цвет
if_not 480, 160 255 //пока не появился нужный цвет в точке 2
    wait 100
    left 480, 160    //куда нужно кликнуть в точке 2 что бы получить нужный цвет
end_if
// и т.д.
end_while
end_script

либо изменить условие повторять цикл пока хотя бы в одной(во всех присутствует не нужный цвет).
while 450, 160 255 or 480, 160 255

Автор: Glosha 17.8.2019, 21:40

спасибо большое!

Автор: Glosha 18.8.2019, 9:36

во втором примере понятно, где проставлять клик под каждый findcolor , а в первом примере не догоняю, где привязывать каждый поиск цвета под свой клик.

у меня еще почему-то перестал работать if, просто проскакивает действие внутри ...

Код
wait 2000
    get mouse_pos #x0 #y0 // позиция до клика
    kleft 3815, 560 abs // клик
    move #x0 #y0 // возврат      
wait 8m
set #d findcolor (3815, 560 3815, 562 1 1 (3798088-4387912) %arr 2 -1 3 abs)
while #d > 0
    set #d findcolor (3815, 560 3815, 562 1 1 (3798088-4387912) %arr 2 -1 3 abs)
    wait 10000
    if  #d = 0
      //тут действие  
    end_if
end_while

Автор: FREEON 18.8.2019, 14:49

Цитата(Glosha @ 18.8.2019, 9:36) *

во втором примере понятно, где проставлять клик под каждый findcolor , а в первом примере не догоняю, где привязывать каждый поиск цвета под свой клик.

Код

set delimiter ' '
init_arr %color 12642802 12642802 12642802  //  цвет в точке 1, цвет в точке 2 ...
init_arr %x 550 560 580                     // координата X в т1, координата X в т2
init_arr %y 180 180 180                     // координата Y в т1, координата Y в т2
set #proverka 0                             // cчетчик проверки цвтов во всех точках
while 1 = 1                                 // зациклили выполнение кода, до тех пор покам нужно
    for #i 1 size(%color)                   // перебираем массив(наши точки а данном случае по размеру цвета)
        log %x[#i], %y[#i] %color[#i]       // показать лог Точки в формате X Y Color
        if  %x[#i], %y[#i] %color[#i]       // Если есть цвет в точке..выполнить действие
            move %x[#i] %y[#i]              // навести мышку на точку(выполнить действие)
            set #proverka 0                 // а также делаем сброс счетчика т.к желаемый результат не достигнут
        else                                // если нет цвета в точке
            set #proverka #proverka + 1     // цвет отсутствует прибавили к счетчику +1
            log #proverka                   // отоброзили в лог состояния счетчика
        end_if                              // конец условия
        if  #proverka >= 3                  // если в 3 точках отсутствует цвет, то...
            break                           // выйти из цикла  for
        end_if
    end_for
    if  #proverka >= 3                      // если в 3 точках отсутствует цвет, то...
        break                               // выйти из цикла  while
    end_if
end_while
end_script

Цитата

у меня еще почему-то перестал работать if, просто проскакивает действие внутри ...

проверьте координаты области поиска x = 3815 ширина монитора???
set #d findcolor (3815, 560 3815, 562

Автор: Glosha 18.8.2019, 15:00

Цитата(FREEON @ 18.8.2019, 14:49) *


проверьте координаты области поиска x = 3815 ширина монитора???
set #d findcolor (3815, 560 3815, 562

спасибо огромное!
да, это два монитора))
у меня там даже просто log "текст" не срабатывает ... все работало, а тут че-то перестало реагировать.

Автор: FREEON 18.8.2019, 15:32

Ну на время тестов скриптов дал бы вам совет особенно если работаете с циклами это биндить кнопки в пилоте или при помощи плагина https://forum.uokit.com/index.php?act=Attach&type=post&id=2465. Кидать(распаковать) в папку Plugins, которая рядом с пилот должна быть создана. Более полную информацию можете посмотреть https://forum.uokit.com/index.php?showtopic=68111&hl=KB\.GetKeyStateByCode.

Пример кода который нужно располагать в циклах for while

Код

//УПРАВЛЕНИЕ СКРИПТОМ
if  KB.GetKeyStateByCode(83) = 1  // S - пауза
    wait 1s
    while_not KB.GetKeyStateByCode(83) = 1  // S -- отпустить паузу
        wait 100
    end_while
end_if
if  KB.GetKeyStateByCode(69) = 1  // E - выключить скрипт
    end_script
end_if


Узнать другие коды клавиш плагина для скрипта можно при помощи https://forum.uokit.com/index.php?act=Attach&type=post&id=2468 Выложил https://forum.uokit.com/index.php?s=&showtopic=68111&view=findpost&p=417286.
Цитата

да, это два монитора))

тогда проверяйте цвет или область поиска у вас там сканирует область размером 3х1 пикселя

Автор: Glosha 18.8.2019, 19:34

Цитата(FREEON @ 18.8.2019, 15:32) *

Ну на время тестов скриптов дал бы вам совет особенно если работаете с циклами это биндить кнопки в пилоте или при помощи плагина https://forum.uokit.com/index.php?act=Attach&type=post&id=2465. Кидать(распаковать) в папку Plugins, которая рядом с пилот должна быть создана. Более полную информацию можете посмотреть https://forum.uokit.com/index.php?showtopic=68111&hl=KB\.GetKeyStateByCode.

Пример кода который нужно располагать в циклах for while

Код

//УПРАВЛЕНИЕ СКРИПТОМ
if  KB.GetKeyStateByCode(83) = 1  // S - пауза
    wait 1s
    while_not KB.GetKeyStateByCode(83) = 1  // S -- отпустить паузу
        wait 100
    end_while
end_if
if  KB.GetKeyStateByCode(69) = 1  // E - выключить скрипт
    end_script
end_if


Узнать другие коды клавиш плагина для скрипта можно при помощи https://forum.uokit.com/index.php?act=Attach&type=post&id=2468 Выложил https://forum.uokit.com/index.php?s=&showtopic=68111&view=findpost&p=417286.

тогда проверяйте цвет или область поиска у вас там сканирует область размером 3х1 пикселя


откатил систему и все заработало. не знаю точно, но мне кажется багнулось, после того, как ушел в спящий режим с работающим скриптом.

Автор: Glosha 18.8.2019, 20:48

Цитата(FREEON @ 18.8.2019, 14:49) *

Код

set delimiter ' '
init_arr %color 12642802 12642802 12642802  //  цвет в точке 1, цвет в точке 2 ...
init_arr %x 550 560 580                     // координата X в т1, координата X в т2
init_arr %y 180 180 180                     // координата Y в т1, координата Y в т2
set #proverka 0                             // cчетчик проверки цвтов во всех точках
while 1 = 1                                 // зациклили выполнение кода, до тех пор покам нужно
    for #i 1 size(%color)                   // перебираем массив(наши точки а данном случае по размеру цвета)
        log %x[#i], %y[#i] %color[#i]       // показать лог Точки в формате X Y Color
        if  %x[#i], %y[#i] %color[#i]       // Если есть цвет в точке..выполнить действие
            move %x[#i] %y[#i]              // навести мышку на точку(выполнить действие)
            set #proverka 0                 // а также делаем сброс счетчика т.к желаемый результат не достигнут
        else                                // если нет цвета в точке
            set #proverka #proverka + 1     // цвет отсутствует прибавили к счетчику +1
            log #proverka                   // отоброзили в лог состояния счетчика
        end_if                              // конец условия
        if  #proverka >= 3                  // если в 3 точках отсутствует цвет, то...
            break                           // выйти из цикла  for
        end_if
    end_for
    if  #proverka >= 3                      // если в 3 точках отсутствует цвет, то...
        break                               // выйти из цикла  while
    end_if
end_while
end_script



не совсем то, что мне нужно... здесь координаты цвета и клика в одной точки, а мне нужен клик в другой тк, это действие след уровня.

Автор: FREEON 18.8.2019, 22:03

Цитата(Glosha @ 18.8.2019, 20:48) *

не совсем то, что мне нужно... здесь координаты цвета и клика в одной точки, а мне нужен клик в другой тк, это действие след уровня.

мысли читать не умею вы опишите точки где идет поиск и где нужно сделать клик, либо нарисуйте схему... т.к. возможны различные варианты

Автор: Glosha 18.8.2019, 22:45

Цитата(FREEON @ 18.8.2019, 22:03) *

мысли читать не умею вы опишите точки где идет поиск и где нужно сделать клик, либо нарисуйте схему... т.к. возможны различные варианты

есть 3 точки координат цвета, пусть будет: "1, 1" "2, 2" "3, 3" и 3 точки клика "4,4" "5, 5" "6, 6". нужно проверить соотвествие в точках цвета и если его там нет(нужного цвета) сделать клик, вот пример:
цикл
проверка цвета "1, 1"
если нет нужного цвета кликнуть "4, 4"
проверка цвета "2, 2"
если нет нужного цвета кликнуть "5, 5" и тд
и так зациклить пока не будет все 3 точки без нужного цвета.

Автор: FREEON 18.8.2019, 23:49

Цитата(Glosha @ 18.8.2019, 22:45) *

есть 3 точки координат цвета, пусть будет: "1, 1" "2, 2" "3, 3" и 3 точки клика "4,4" "5, 5" "6, 6". нужно проверить соотвествие в точках цвета и если его там нет(нужного цвета) сделать клик, вот пример:
цикл
проверка цвета "1, 1"
если нет нужного цвета кликнуть "4, 4"
проверка цвета "2, 2"
если нет нужного цвета кликнуть "5, 5" и тд
и так зациклить пока не будет все 3 точки без нужного цвета.

Код

set delimiter ' '
init_arr %color 12642802 12642802 12642802  //  цвет в точке 1, цвет в точке 2 ...
init_arr %x 550 560 580                     // координата X в т1, координата X в т2
init_arr %y 180 180 180                     // координата Y в т1, координата Y в т2
init_arr %xx 111 222 333                    // координаты кликов X
init_arr %yy 11 22 33                       // координаты кликов Y
set #proverka 0                             // cчетчик проверки цвтов во всех точках
while 1 = 1                                 // зациклили выполнение кода, до тех пор покам нужно
    for #i 1 size(%color)                   // перебираем массив(наши точки а данном случае по размеру цвета)
        log %x[#i], %y[#i] %color[#i]       // показать лог Точки в формате X Y Color
        if  %x[#i], %y[#i] %color[#i]       // Если есть цвет в точке..выполнить действие
            move %xx[#i] %yy[#i]            // навести мышку на точку(выполнить действие)
            set #proverka 0                 // а также делаем сброс счетчика т.к желаемый результат не достигнут
        else                                // если нет цвета в точке
            set #proverka #proverka + 1     // цвет отсутствует прибавили к счетчику +1
            log #proverka                   // отоброзили в лог состояния счетчика
        end_if                              // конец условия
        if  #proverka >= 3                  // если в 3 точках отсутствует цвет, то...
            break                           // выйти из цикла  for
        end_if
    end_for
    if  #proverka >= 3                      // если в 3 точках отсутствует цвет, то...
        break                               // выйти из цикла  while
    end_if
end_while
end_script

Автор: Fors1k 19.8.2019, 2:30

Цитата(Glosha @ 18.8.2019, 9:36) *
в первом примере не догоняю, где привязывать каждый поиск цвета под свой клик.

Код
set delimiter ' '
init_arr %a (1) "1, 2 3, 4" "5, 6 7, 8" "9, 10 11, 12" "13, 14 15, 16" "17, 18 19, 20" "21, 22 23, 24"
init_arr %b (1) "1 2" "3 4" "5 6" "7 8" "9 10" "11 12" // координаты для клика
while size(%a[1]) > 0
for #i 1 size(%a[1])
    set $a %a[1 #i]
    set #a findcolor ($a 1 1 (3798088-4387912) %arr 2 -1 3 workwindow)
    if  #a = 0
        set $b %b[1 #i]
        kleft $b
        delete_array %a #i
        delete_array %b #i
        break
    end_if
end_for
end_while
end_script

Автор: Glosha 19.8.2019, 10:47

спасибо огромное всем за помощь!

пс. подскажите, у меня пилот при составление координат цепляется к размеру кнопки, а не всего окна программы, но у меня там 15 кнопок и все одинакового размера... можно, как-то акцентировать на все окно? или только через "abs"?

Автор: Glosha 19.8.2019, 12:48

Цитата(Fors1k @ 19.8.2019, 2:30) *

Код
set delimiter ' '
init_arr %a (1) "1, 2 3, 4" "5, 6 7, 8" "9, 10 11, 12" "13, 14 15, 16" "17, 18 19, 20" "21, 22 23, 24"
init_arr %b (1) "1 2" "3 4" "5 6" "7 8" "9 10" "11 12" // координаты для клика
while size(%a[1]) > 0
for #i 1 size(%a[1])
    set $a %a[1 #i]
    set #a findcolor ($a 1 1 (3798088-4387912) %arr 2 -1 3 workwindow)
    if  #a = 0
        set $b %b[1 #i]
        kleft $b
        delete_array %a #i
        delete_array %b #i
        break
    end_if
end_for
end_while
end_script


не работает у меня твой код, все время типо нашел цвет циклит, даже если нет там вообще нечего

Автор: FREEON 19.8.2019, 13:25

Цитата(Glosha @ 19.8.2019, 10:47) *

пс. подскажите, у меня пилот при составление координат цепляется к размеру кнопки, а не всего окна программы, но у меня там 15 кнопок и все одинакового размера... можно, как-то акцентировать на все окно? или только через "abs"?

можно, но это дело случая может сработать а может и нет...но суть такова просто снимаете координаты относительно первого привязанного окна .
Что под этим подразумеваю? ну нам нужно сделать привязку к окну где будем работать. Затем переходим в настройки пилота, далее выпавшем меню нажимаем Настройки, далее вкладка Mouse, Ищем строку Отображать координаты курсора и выбираем Относительные жмем Save. Всё теперь вверху пилота пишутся координаты при смещении курсора. Дале наводим курсор на кнопку но не снимая координаты(не нажимая ctrl+a) и не убирая мышку, переписываем относительные координаты на листик или запоминаем если память хорошая и затем вставляем в свой скрипт.
Ну либо через паинт или некоторые утилиты окна так же можно снимать положение точек относительно точки начала отсчета окна.
Но это либо будет работать либо нет. Есче как вариант можно через название окон кнопок попробовать...но первый это более сложный вариант

Автор: Glosha 19.8.2019, 14:20

Цитата(FREEON @ 18.8.2019, 23:49) *

твой код
Код

set delimiter ' '
init_arr %color 12642802 12642802 12642802  //  цвет в точке 1, цвет в точке 2 ...
init_arr %x 550 560 580                     // координата X в т1, координата X в т2
init_arr %y 180 180 180                     // координата Y в т1, координата Y в т2
init_arr %xx 111 222 333                    // координаты кликов X
init_arr %yy 11 22 33                       // координаты кликов Y
set #proverka 0                             // cчетчик проверки цвтов во всех точках
while 1 = 1                                 // зациклили выполнение кода, до тех пор покам нужно
    for #i 1 size(%color)                   // перебираем массив(наши точки а данном случае по размеру цвета)
        log %x[#i], %y[#i] %color[#i]       // показать лог Точки в формате X Y Color
        if  %x[#i], %y[#i] %color[#i]       // Если есть цвет в точке..выполнить действие
            move %xx[#i] %yy[#i]            // навести мышку на точку(выполнить действие)
            set #proverka 0                 // а также делаем сброс счетчика т.к желаемый результат не достигнут
        else                                // если нет цвета в точке
            set #proverka #proverka + 1     // цвет отсутствует прибавили к счетчику +1
            log #proverka                   // отоброзили в лог состояния счетчика
        end_if                              // конец условия
        if  #proverka >= 3                  // если в 3 точках отсутствует цвет, то...
            break                           // выйти из цикла  for
        end_if
    end_for
    if  #proverka >= 3                      // если в 3 точках отсутствует цвет, то...
        break                               // выйти из цикла  while
    end_if
end_while
end_script



тут тоже не то, что нужно.. не циклит на проверки цвета, что есть, что нету его уходит в клик + клик не по заданным осям и кликает в одно и тоже место, количество кликов в зависимости заданного счетчика .
привязка стоит к окну.
мои данные
Код

set #handle findwindow ("Manager")  // найти окно
set workwindow #handle              // сделать его рабочим
set windowpos 1, 515

set delimiter ' '
init_arr %color 4387912 4387912   //  цвет в точке 1, цвет в точке 2 ...
init_arr %x 429 429                     // координата X в т1, координата X в т2
init_arr %y 560 590                     // координата Y в т1, координата Y в т2
init_arr %xx 429 429                     // координаты кликов X
init_arr %yy 620 650                      // координаты кликов Y
set #proverka 0                             // cчетчик проверки цвтов во всех точках
while 1 = 1                                 // зациклили выполнение кода, до тех пор покам нужно
    for #i 1 size(%color)                   // перебираем массив(наши точки а данном случае по размеру цвета)
        log %x[#i], %y[#i] %color[#i]       // показать лог Точки в формате X Y Color
        if  %x[#i], %y[#i] %color[#i]
         move %xx[#i] %yy[#i]  
            set #proverka 0                 // а также делаем сброс счетчика т.к желаемый результат не достигнут
        else                                // если нет цвета в точке
            set #proverka #proverka + 1     // цвет отсутствует прибавили к счетчику +1
            kleft %xx[#i] %yy[#i]            // навести мышку на точку(выполнить действие)
        end_if                              // конец условия
        if  #proverka >= 2                 // если в 3 точках отсутствует цвет, то...
            break                           // выйти из цикла  for
        end_if
    end_for
    if  #proverka >= 2                   // если в 3 точках отсутствует цвет, то...
        break                               // выйти из цикла  while
    end_if
end_while
end_script

Автор: FREEON 19.8.2019, 14:40

Цитата(Glosha @ 19.8.2019, 14:20) *

тут тоже не то, что нужно.. не циклит на проверки цвета, что есть, что нету его уходит в клик + клик не по заданным осям и кликает в одно и тоже место, количество кликов в зависимости заданного счетчика .
привязка стоит к окну.
мои данные
Код

set #handle findwindow ("Manager")  // найти окно
set workwindow #handle              // сделать его рабочим
set windowpos 1, 515

set delimiter ' '
init_arr %color 4387912 4387912   //  цвет в точке 1, цвет в точке 2 ...
init_arr %x 429 429                     // координата X в т1, координата X в т2
init_arr %y 560 590                     // координата Y в т1, координата Y в т2
init_arr %xx 429 429                     // координаты кликов X
init_arr %yy 620 650                      // координаты кликов Y
set #proverka 0                             // cчетчик проверки цвтов во всех точках
while 1 = 1                                 // зациклили выполнение кода, до тех пор покам нужно
    for #i 1 size(%color)                   // перебираем массив(наши точки а данном случае по размеру цвета)
        log %x[#i], %y[#i] %color[#i]       // показать лог Точки в формате X Y Color
        if  %x[#i], %y[#i] %color[#i]
         move %xx[#i] %yy[#i]  
            set #proverka 0                 // а также делаем сброс счетчика т.к желаемый результат не достигнут
        else                                // если нет цвета в точке
            set #proverka #proverka + 1     // цвет отсутствует прибавили к счетчику +1
            kleft %xx[#i] %yy[#i]            // навести мышку на точку(выполнить действие)
        end_if                              // конец условия
        if  #proverka >= 2                 // если в 3 точках отсутствует цвет, то...
            break                           // выйти из цикла  for
        end_if
    end_for
    if  #proverka >= 2                   // если в 3 точках отсутствует цвет, то...
        break                               // выйти из цикла  while
    end_if
end_while
end_script


Код


set #handle findwindow ("Manager")  // найти окно
set workwindow #handle              // сделать его рабочим
set windowpos 1, 515

set delimiter ' '
init_arr %color 4387912 4387912   //  цвет в точке 1, цвет в точке 2 ...
init_arr %x 429 429                     // координата X в т1, координата X в т2
init_arr %y 560 590                     // координата Y в т1, координата Y в т2
init_arr %xx 429 429  X1 X2 X3 !!!                  // координаты кликов X
init_arr %yy 620 650  Y1 Y2 Y3 !!!                   // координаты кликов Y
set #proverka 0                             // cчетчик проверки цвтов во всех точках
while 1 = 1                                 // зациклили выполнение кода, до тех пор покам нужно
    for #i 1 size(%color)                   // перебираем массив(наши точки а данном случае по размеру цвета)
        log %x[#i], %y[#i] %color[#i]       // показать лог Точки в формате X Y Color
        if  %x[#i], %y[#i] %color[#i]
            while %x[#i], %y[#i] %color[#i]
                move %xx[#i] %yy[#i]
                wait 100
            end_while
            set #proverka 0                 // а также делаем сброс счетчика т.к желаемый результат не достигнут
        else                                // если нет цвета в точке
            set #proverka #proverka + 1     // цвет отсутствует прибавили к счетчику +1
            kleft %xx[#i] %yy[#i]            // навести мышку на точку(выполнить действие)
        end_if                              // конец условия
        if  #proverka >= 2                 // если в 3 точках отсутствует цвет, то...
            break                           // выйти из цикла  for
        end_if
    end_for
    if  #proverka >= 2                   // если в 3 точках отсутствует цвет, то...
        break                               // выйти из цикла  while
    end_if
end_while
end_script

какие точки кликов указали туда и "кликает" %xx %yy две одинаковые координаты пикселей x1y1 = 429 620 и x2y2 = 429 620

Автор: Glosha 19.8.2019, 14:51

Цитата(FREEON @ 19.8.2019, 14:40) *


какие точки кликов указали туда и "кликает" %xx %yy две одинаковые координаты пикселей x1y1 = 429 620 и x2y2 = 429 620


не, там вторая точка 429 650
все равно проскакивает цикл, хотя цвет есть.
вот такое все четко работает
Код
set #d findcolor (3815, 560 3815, 562 1 1 (3798088-4387912) %arr 2 -1 3 abs)
while #d > 0
    set #d findcolor (3815, 560 3815, 562 1 1 (3798088-4387912) %arr 2 -1 3 abs)
    wait 10000
    if  #d = 0
        
    end_if
end_while

Автор: FREEON 19.8.2019, 15:52

Цитата(Glosha @ 19.8.2019, 14:51) *

не, там вторая точка 429 650
все равно проскакивает цикл, хотя цвет есть.
вот такое все четко работает

Вы при снятии координат и цвета делаете проверку последнего Ctrl + В

Автор: Glosha 19.8.2019, 16:12

Цитата(FREEON @ 19.8.2019, 15:52) *

Вы при снятии координат и цвета делаете проверку последнего Ctrl + В

но ваш код у меня не работает, хз, что делать.
у меня просто проскакивает проверку цвета и уходит в действие если нет цвета, и кликает в одно и тоже место, хотя координаты указаны разные
init_arr %xx 429 429 X1 X2 X3 !!! // координаты кликов X
init_arr %yy 620 650 Y1 Y2 Y3 !!! // координаты кликов Y

Автор: Fors1k 19.8.2019, 16:22

Цитата(Glosha @ 19.8.2019, 12:48) *
не работает у меня твой код, все время типо нашел цвет циклит, даже если нет там вообще нечего

Оказывается, findcolor не видит координаты из строковых переменных и массивов. Исправил это.

Код
set workwindow findwindow ("Manager") // указываем окно поиска
set delimiter ' '
init_arr %a (1 4) 1 2 3 4 5 6 7 8 9 10 11 12 // координаты для поиска
init_arr %b (1 2) 1 2 3 4 5 6  // координаты для клика
while size(%a) > 0
for #i 1 size(%a)
    set #a %a[#i 1]
    set #b %a[#i 2]
    set #c %a[#i 3]
    set #d %a[#i 4]
    set #fc findcolor (#a #b #c #d 1 1 (3798088-4387912) %arr 2 -1 3 workwindow)
    if  #fc = 0
        kleft %b[#i]
        delete_array %a -#i
        delete_array %b -#i
        break
    end_if
end_for
end_while
end_script


В массив %a записать координаты всех мест поиска: StartX StartY EndX EndY.
В массив %b записать координаты всех мест клика: X Y.

3815, 560 3815, 562 - это, я так понимаю, координаты одной из кнопок, где проверяешь цвет. Дай на всякий случай координаты всех кнопок, в которых ищешь цвет, и куда кликать.

Автор: Glosha 19.8.2019, 16:43

Цитата(Fors1k @ 19.8.2019, 16:22) *

3815, 560 3815, 562 - это, я так понимаю, координаты одной из кнопок, где проверяешь цвет. Дай на всякий случай координаты всех кнопок, в которых ищешь цвет, и куда кликать.

делаю тесты и нечего не выходит, просто считывает код и заканчивает
вот для примера подставлял 1 точку для теста
init_arr %a (1 4) 2353 560 2353 560 // записать координаты всех мест поиска цвета: StartX StartY EndX EndY.
init_arr %b (1 2) 2353 590 // записать координаты всех мест клика: X Y.

Автор: Fors1k 19.8.2019, 17:01

Цитата(Glosha @ 19.8.2019, 16:43) *

делаю тесты и нечего не выходит, просто считывает код и заканчивает
вот для примера подставлял 1 точку для теста
init_arr %a (1 4) 2353 560 2353 560 // записать координаты всех мест поиска цвета: StartX StartY EndX EndY.
init_arr %b (1 2) 2353 590 // записать координаты всех мест клика: X Y.

Запустил у себя код, скопировав прям с форума. Все работает.
Цитата(Glosha @ 19.8.2019, 16:43) *
просто считывает код и заканчивает

Скрипт может закончиться, только если он не нашел цвет. Если не нашел цвет, значит должен выполниться kleft. Если ты говоришь, что не произошло вообще ничего, то это невозможно.
Присылай запущенный код целиком, где-то должна быть ошибка.

Клик должен быть в том же окне, в котором идет поиск?

Автор: Glosha 19.8.2019, 17:39

Цитата(Fors1k @ 19.8.2019, 17:01) *

Запустил у себя код, скопировав прям с форума. Все работает.

Скрипт может закончиться, только если он не нашел цвет. Если не нашел цвет, значит должен выполниться kleft. Если ты говоришь, что не произошло вообще ничего, то это невозможно.
Присылай запущенный код целиком, где-то должна быть ошибка.

Клик должен быть в том же окне, в котором идет поиск?

https://i.imgur.com/QZgtH8w.png
вот смотри, я проверяю цвет в 3 точках внизу, 2 из них активны, а 1 не активно, значит скрипт должен кликнуть на 4(если например не активно 2, то клик должен быть привязан к 5), а дальше ожидать пока не откажут в цвете 2 и 3, а после кликнуть 5 и 6, и выйти. вот мои координаты точек

init_arr %a (1 4) 433 890 433 890 433 920 433 920 433 950 433 950 // записать координаты всех мест поиск цвета: StartX StartY EndX EndY.
init_arr %b (1 2) 433 560 433 590 433 620 // записать координаты всех мест клика: X Y.

они 100% рабочие тк они с другого проекта и там все работает.

Автор: Fors1k 19.8.2019, 18:22

Цитата(Glosha @ 19.8.2019, 17:39) *
https://i.imgur.com/QZgtH8w.png


Проверил прямо на твоем скриншоте. Итог в логе: net cveta v knopke 1 , далее бесконечная проверка кнопки 2 и 3. Все работает как должно.

Что-то типа режима отладки:
Код
set workwindow findwindow ("Manager") // указываем окно поиска
log workwindow // отчет. нашел ли окно
set windowpos 1, 515
set delimiter ' '
init_arr %a (1 4) 433 890 433 890 433 920 433 920 433 950 433 950 // координаты для поиска
init_arr %b (1 2) 433 560 433 590 433 620 // координаты для клика
log size(%a)  // отчет. получил ли размер массива
while size(%a) > 0
log voshli v while   // отчет. получил ли размер массива
for #i 1 size(%a)
    log voshli v for  // отчет. получил ли размер массива
    set #a %a[#i 1]
    set #b %a[#i 2]
    set #c %a[#i 3]
    set #d %a[#i 4]
    set #fc findcolor (#a #b #c #d 1 1 (3798088-4387912) %arr 2 -1 3 workwindow)
    log результат поиска: #fc  // отчет. должен быть не меньше нуля
    if  #fc = 0
        log cvet ne naiden  // отчет. не нашли цвет. Далее делается клик. Курсор должен уехать в точку клика.
        kleft %b[#i]
        log %b[#i]  // отчет. проверяем туда ли был сделан клик.
        delete_array %a -#i
        delete_array %b -#i
        break
    end_if
    log cvet naiden  // отчет. проверенная кнопка подсвечена.
end_for
end_while
log цвет больше нигде не найден // отчет. все кнопки погасли, заканчиваем работу.
end_script


Запускай вот этот, и присылай отчет из лога.

Автор: Glosha 19.8.2019, 19:09

Цитата(Fors1k @ 19.8.2019, 18:22) *

Запускай вот этот, и присылай отчет из лога.

вообще нечего не находит, но твой скрипт от "Сегодня, 16:22" работает, но криво.. смотри че он делает:
пока все 3 кнопки активны он находит цвета и циклирует и ожидает отказа цвета, отрубаю 1, скрипт видит отказ цвета и кликает, на отказ в цифре 2 вообще не реагирует, отказ в цифре 3, все норм кликает... но все время кликает не по указанным координатам 433 560 433 590 433 620 , всегда в одну и туже точку 433 1070 и пиши в клики че хочешь, все равно кликнет в 433 1070(это низ рабочего окна)

Автор: Glosha 19.8.2019, 19:45

и кстати в скрипте от FREEON, тоже самое если привязать окно, то кликает в самый низ окна....но вот цвета не находит. попробовал не привязывать окно в скрипте Fors1k, кликает в нужное место, только 1 раз, остальные клики все в место первого клика

Автор: FREEON 19.8.2019, 19:55

используй findimage и не грузи народ...сложность нашол там где ее нет

Автор: Glosha 19.8.2019, 20:02

Цитата(FREEON @ 19.8.2019, 19:55) *

используй findimage и не грузи народ...сложность нашол там где ее нет

от Fors1k, скрипт работает четко(если не привязывать окно), только вот кликает в одно и тоже место....

Автор: Fors1k 19.8.2019, 20:18

https://mfd.sk/_k4LqWblgRNoBJZKneP7BKU1
На видео я отключаю зеленый цвет на ячейке с цифрой 3, скрипт кликает в ячейку с цифрой 3 красного цвета, отключаю зеленый 1, клик в красный 1, отключил 2, клик в красный 2, на этом конец работы. Все клики разные и в нужные места. Как ты и просил. Скрипт, как видишь рабочий. Не знаю что еще добавить))
Где-то ошибку допускаешь ты.
Я сказал как найти ошибку (используя логи), ты не хочешь.

Скрипт из видео
Код
set workwindow 1184446//findwindow ("Manager") // указываем окно поиска
set delimiter ' '
init_arr %a (1 4) 46 91 124 107 47 149 127 165 45 209 129 222 // координаты для поиска
init_arr %b (1 2) 562 41 566 71 565 102  // координаты для клика
while size(%a) > 0
for #i 1 size(%a)
    set #a %a[#i 1]
    set #b %a[#i 2]
    set #c %a[#i 3]
    set #d %a[#i 4]
    set #fc findcolor (#a #b #c #d 1 1 (4697456) %arr 2 -1 3 workwindow)
    if  #fc = 0
        kleft %b[#i]
        delete_array %a -#i
        delete_array %b -#i
        break
    end_if
end_for
end_while
end_script

Автор: FREEON 19.8.2019, 20:44

Цитата(Fors1k @ 19.8.2019, 20:18) *

На видео

сбрось свой файл uopilot.ini подсветку синтекса заценю

Автор: Glosha 19.8.2019, 20:44

Цитата(Fors1k @ 19.8.2019, 20:18) *

https://mfd.sk/_k4LqWblgRNoBJZKneP7BKU1
На видео я отключаю зеленый цвет на ячейке с цифрой 3, скрипт кликает в ячейку с цифрой 3 красного цвета, отключаю зеленый 1, клик в красный 1, отключил 2, клик в красный 2, на этом конец работы. Все клики разные и в нужные места. Как ты и просил. Скрипт, как видишь рабочий. Не знаю что еще добавить))
Где-то ошибку допускаешь ты.
Я сказал как найти ошибку (используя логи), ты не хочешь.
Скрипт из видео
Код
set workwindow 1184446//findwindow ("Manager") // указываем окно поиска
set delimiter ' '
init_arr %a (1 4) 46 91 124 107 47 149 127 165 45 209 129 222 // координаты для поиска
init_arr %b (1 2) 562 41 566 71 565 102  // координаты для клика
while size(%a) > 0
for #i 1 size(%a)
    set #a %a[#i 1]
    set #b %a[#i 2]
    set #c %a[#i 3]
    set #d %a[#i 4]
    set #fc findcolor (#a #b #c #d 1 1 (4697456) %arr 2 -1 3 workwindow)
    if  #fc = 0
        kleft %b[#i]
        delete_array %a -#i
        delete_array %b -#i
        break
    end_if
end_for
end_while
end_script


все работает четко, извиняюсь за вынос мозга.... проблема была в привязке окна, почему-то через
Код

set #handle findwindow ("Manager")  // найти окно
set workwindow #handle              // сделать его рабочим

глючит, я хз почему.... это не моя вина. привязал, как следует, но с этим окном, вот такое происходит. без привязки, работает идеально !!!!

Автор: Fors1k 19.8.2019, 21:13

Цитата(FREEON @ 19.8.2019, 20:44) *

сбрось свой файл uopilot.ini подсветку синтекса заценю

Highlighter
[Highlighter]
Assembler=4473924,255,0
Character=4473924,43690,0
Comment=4473924,12303291,2
Float=4473924,11184810,0
Hexadecimal=4473924,11184742,0
Identifier=4473924,12303291,0
Number=4473924,11184810,0
Preprocessor=4473924,32768,2
Reserved Word=4473924,0,1
RW Array=4473924,14522777,1
RW CharParam=4473924,43690,0
RW ColorAndCord=4473924,43690,0
RW EndScript=4473924,7829469,1
RW For=4473924,43520,1
RW Function=4473924,14522777,1
RW Get=4473924,12303291,1
RW If=4473924,43520,0
RW Keyboard=4473924,12303291,1
RW LastObject=4473924,43690,0
RW Macros=4473924,12613568,1
RW Memory=4473924,14522777,1
RW Mouse=4473924,12303291,1
RW Msg=4473924,6710886,1
RW Other=4473924,14522777,1
RW Plugin=4473924,14522777,1
RW Proc=4473924,14522777,1
RW Script=4473924,7829469,1
RW Sub=4473924,12613568,1
RW Time=4473924,43690,0
RW Wait=4473924,12303291,1
RW Windows=4473924,14522777,1
Space=4473924,0,0
String=4473924,12303291,0
Symbol=4473924,8947848,0
RW Array List=
RW CharParam List=
RW ColorAndCord List=
RW EndScript List=
RW For List=
RW Function List=
RW Get List=
RW If List=
RW Keyboard List=
RW LastObject List=
RW Macros List=
RW Memory List=
RW Mouse List=
RW Msg List=
RW Other List=
RW Plugin List=
RW Proc List=
RW Script List=
RW Sub List=
RW Time List=
RW Wait List=
RW Windows List=

Автор: Glosha 20.8.2019, 10:27

delete

Автор: Glosha 21.8.2019, 12:12

не могу понять, если значение тут 1 цифра " init_arr %tw (1) 4 5 ", то работает корректно и правильно находит стол, но если больше 1 значение, начинается хаос с выбором стола.

code
Код
set delimiter ' '
set workwindow 394820
init_arr %a (1 4) 2354 560 2354 560 2354 590 2354 590 // записать координаты всех мест поиска цвета: StartX StartY EndX EndY.
init_arr %b (1 2) 2354 740 2354 770// записать координаты всех мест клика: X Y.
init_arr %tw (1) 4 5
while size(%a) > 0
for #i 1 size(%a)
    set #a %a[#i 1]
    set #b %a[#i 2]
    set #c %a[#i 3]
    set #d %a[#i 4]
    set #fc findcolor (#a #b #c #d 1 1 (3798088-4387912) %arr 2 -1 3 workwindow)
    if  #fc = 0
        kleft %b[#i]
        wait 33s
         kleft 1058, 216 abs
         wait 3s
         set #ld linedelay
        set linedelay 40
        set #cw 1 // номер рабочего стола, в котором сейчас находится окно.
        set workwindow 394820 // окно, которое будем перемещать
        showwindow workwindow
        if #cw < %tw[#i]
        set #a 2
        else
        set #a 1
        end_if
        sendex_down {WindowsLeft}{Tab}
        sendex_up {WindowsLeft}{Tab}
        wait 350
        sendex_down ~{F10}
        wait 200
        sendex_up ~{F10}
        wait 200
        sendex {Down}
        wait 200
        sendex {Down}
        wait 200
        sendex {Right}
        wait 200
        repeat %tw[#i] - #a
        sendex {Down}
        end_repeat
        sendex {Enter}
        sendex {Escape}
        set linedelay #ld
        delete_array %tw -#i
        delete_array %a -#i
        delete_array %b -#i
        break
    end_if
end_for
end_while

Автор: Glosha 21.8.2019, 15:10

всем, спс! разобрался....
init_arr %a (1) // в скобках используется для координат.
init_arr %a 1 //без скобок символы.
ps. подскажите, а как в последний массив кода, который выше, добавить таймер?

Автор: Fors1k 22.8.2019, 3:33

Цитата(Glosha @ 21.8.2019, 12:12) *

не могу понять, если значение тут 1 цифра " init_arr %tw (1) 4 5 ", то работает корректно и правильно находит стол, но если больше 1 значение, начинается хаос с выбором стола.
code
Код
set delimiter ' '
set workwindow 394820
init_arr %a (1 4) 2354 560 2354 560 2354 590 2354 590 // записать координаты всех мест поиска цвета: StartX StartY EndX EndY.
init_arr %b (1 2) 2354 740 2354 770// записать координаты всех мест клика: X Y.
init_arr %tw (1) 4 5
while size(%a) > 0
for #i 1 size(%a)
    set #a %a[#i 1]
    set #b %a[#i 2]
    set #c %a[#i 3]
    set #d %a[#i 4]
    set #fc findcolor (#a #b #c #d 1 1 (3798088-4387912) %arr 2 -1 3 workwindow)
    if  #fc = 0
        kleft %b[#i]
        wait 33s
         kleft 1058, 216 abs
         wait 3s
         set #ld linedelay
        set linedelay 40
        set #cw 1 // номер рабочего стола, в котором сейчас находится окно.
        set workwindow 394820 // окно, которое будем перемещать
        showwindow workwindow
        if #cw < %tw[#i]
        set #a 2
        else
        set #a 1
        end_if
        sendex_down {WindowsLeft}{Tab}
        sendex_up {WindowsLeft}{Tab}
        wait 350
        sendex_down ~{F10}
        wait 200
        sendex_up ~{F10}
        wait 200
        sendex {Down}
        wait 200
        sendex {Down}
        wait 200
        sendex {Right}
        wait 200
        repeat %tw[#i] - #a
        sendex {Down}
        end_repeat
        sendex {Enter}
        sendex {Escape}
        set linedelay #ld
        delete_array %tw -#i
        delete_array %a -#i
        delete_array %b -#i
        break
    end_if
end_for
end_while


init_arr %tw (1 1) 4 5 нужно записать так.
Цитата(Glosha @ 21.8.2019, 15:10) *

всем, спс! разобрался....
init_arr %a (1) // в скобках используется для координат.
init_arr %a 1 //без скобок символы.
ps. подскажите, а как в последний массив кода, который выше, добавить таймер?

Про единицу после %a разобрался неправильно, перечитай описание команды на вики.
Что такое таймер в массив?

Автор: Glosha 22.8.2019, 10:56

Цитата(Fors1k @ 22.8.2019, 3:33) *

init_arr %tw (1 1) 4 5 нужно записать так.

Про единицу после %a разобрался неправильно, перечитай описание команды на вики.
Что такое таймер в массив?

странно у меня без (1 1) все четко работает.... ок, исправлю и проверю.
ага нашел в вики (1 1) записать 1 значение с 1 элементом.
по поводу таймера. мне еще нужно, как вариант, чтобы кроме проверки цвета в кнопке был таймер временной, чтобы я например задал нужное время и даже если все 6 кнопок не дали отказ, пилот вышел из массива и пошел дальше.

Автор: Glosha 23.8.2019, 12:43

поправите пожалуйста если неправильно, но вроде работает (таймер)

код
Код
set delimiter ' '
set workwindow 394820
set #timeout timer + 30000  // устанавливает значение timer
set #cw 1 // номер рабочего стола, в котором сейчас находится окно.
init_arr %a (1 4) 2354 560 2354 560 2354 590 2354 590 2354 620 2354 620 2354 650 2354 650 2354 680 2354 680 2354 710 2354 710 // записать координаты всех мест
init_arr %b (1 2) 2354 560 2354 590 2354 620 2354 650 2354 680 2354 710// записать координаты всех мест клика: X Y.
while size(%a) > 0 or timer < #timeout
for #i 1 size(%a)
    set #a %a[#i 1]
    set #b %a[#i 2]
    set #c %a[#i 3]
    set #d %a[#i 4]
    set #fc findcolor (#a #b #c #d 1 1 (3798088-4387912) %arr 2 -1 3 workwindow)
    if  #fc = 0
    kleft %b[#i]
        delete_array %a -#i
        delete_array %b -#i
        break
    end_if
end_for
if timer >= #timeout    // если вышло время
break
end_if
end_while
end_script

Автор: Fors1k 23.8.2019, 13:34

Цитата(Glosha @ 23.8.2019, 12:43) *

поправите пожалуйста если неправильно, но вроде работает (таймер)
код
Код
set delimiter ' '
set workwindow 394820
set #timeout timer + 30000  // устанавливает значение timer
set #cw 1 // номер рабочего стола, в котором сейчас находится окно.
init_arr %a (1 4) 2354 560 2354 560 2354 590 2354 590 2354 620 2354 620 2354 650 2354 650 2354 680 2354 680 2354 710 2354 710 // записать координаты всех мест
init_arr %b (1 2) 2354 560 2354 590 2354 620 2354 650 2354 680 2354 710// записать координаты всех мест клика: X Y.
while size(%a) > 0 or timer < #timeout
for #i 1 size(%a)
    set #a %a[#i 1]
    set #b %a[#i 2]
    set #c %a[#i 3]
    set #d %a[#i 4]
    set #fc findcolor (#a #b #c #d 1 1 (3798088-4387912) %arr 2 -1 3 workwindow)
    if  #fc = 0
    kleft %b[#i]
        delete_array %a -#i
        delete_array %b -#i
        break
    end_if
end_for
if timer >= #timeout    // если вышло время
break
end_if
end_while
end_script


код
Код
set delimiter ' '
set workwindow 394820
set #timeout 30000  // установить значение #timeout
set #cw 1 // номер рабочего стола, в котором сейчас находится окно.
init_arr %a (1 4) 2354 560 2354 560 2354 590 2354 590 2354 620 2354 620 2354 650 2354 650 2354 680 2354 680 2354 710 2354 710 // записать координаты всех мест
init_arr %b (1 2) 2354 560 2354 590 2354 620 2354 650 2354 680 2354 710// записать координаты всех мест клика: X Y.
while size(%a) > 0 and timer < #timeout
for #i 1 size(%a)
    set #a %a[#i 1]
    set #b %a[#i 2]
    set #c %a[#i 3]
    set #d %a[#i 4]
    set #fc findcolor (#a #b #c #d 1 1 (3798088-4387912) %arr 2 -1 3 workwindow)
    if  #fc = 0
    kleft %b[#i]
        delete_array %a -#i
        delete_array %b -#i
        break
    end_if
end_for
end_while
end_script

Автор: Glosha 23.8.2019, 13:43

Цитата(Fors1k @ 23.8.2019, 13:34) *

код
Код
set delimiter ' '
set workwindow 394820
set #timeout 30000  // установить значение #timeout
set #cw 1 // номер рабочего стола, в котором сейчас находится окно.
init_arr %a (1 4) 2354 560 2354 560 2354 590 2354 590 2354 620 2354 620 2354 650 2354 650 2354 680 2354 680 2354 710 2354 710 // записать координаты всех мест
init_arr %b (1 2) 2354 560 2354 590 2354 620 2354 650 2354 680 2354 710// записать координаты всех мест клика: X Y.
while size(%a) > 0 and timer < #timeout
for #i 1 size(%a)
    set #a %a[#i 1]
    set #b %a[#i 2]
    set #c %a[#i 3]
    set #d %a[#i 4]
    set #fc findcolor (#a #b #c #d 1 1 (3798088-4387912) %arr 2 -1 3 workwindow)
    if  #fc = 0
    kleft %b[#i]
        delete_array %a -#i
        delete_array %b -#i
        break
    end_if
end_for
end_while
end_script



таймер, указывается только в миллисекундах? 2m или 2h не катит?

Автор: Fors1k 23.8.2019, 13:47

Цитата(Glosha @ 22.8.2019, 10:56) *

странно у меня без (1 1) все четко работает.... ок, исправлю и проверю.
ага нашел в вики (1 1) записать 1 значение с 1 элементом.

(1 1) означает записывать элементы, начиная с 1ой строки, и по 1 элементу в каждую строку.
init_arr %tw (1 1) 4 5 Результат:
Строка 1: 4
Строка 2: 5
Дальше в коде ты обращаешься к массиву через %tw[#i].
%tw[1] будет равно 4 (взяли элемент из 1ой строки).
%tw[2] будет равно 5 (взяли элемент из 2ой строки).


Цитата(Glosha @ 23.8.2019, 13:43) *

таймер, указывается только в миллисекундах? 2m или 2h не катит?
Цитата(Fors1k @ 5.8.2019, 19:46) *

Нюансы такого плана ты можешь узнать на вики.

Автор: Glosha 1.9.2019, 13:37

разобрался

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)