Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопрос по рабочим столам в Win10
UoKit.com Форумы > Кликер > UO Pilot
Страницы: 1, 2
Glosha
День добрый!
Вопрос по рабочим столам в Win10.
Подскажите пожалуйста, а можно эмулировать в кликере перетаскивание окна на рабочий стол 2,3 и тп?
Fors1k
код
Код
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
Цитата(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
Цитата(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
Цитата
запустил скрипт в любое удобное время, а он в 10 утра продолжил исполнять скрипт дальше.

Код
while hour != 10 or min != 0  // ждать когда будет 10 часов 0 минут
    wait 10
end_while
// дальше скрипт
end_script
Glosha
Цитата(cirus @ 5.8.2019, 15:08) *

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


Спасибо!
Glosha
подскажите, а есть ограничения на команды wait ? ну например мне нужно 3 часа ожидания... или лучше такие промежутки заводить через таймер?
Fors1k
Цитата(Glosha @ 5.8.2019, 19:08) *

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

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

Код
Wait 3h
FREEON
Цитата(Fors1k @ 5.8.2019, 19:46) *

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

Код
Wait 3h


Помоему такого формата не работает, нужно переводить в минуты, секунды или милесекунды... Но могу и ошибаться далёко от пк что бы проверить.
Glosha
Цитата(FREEON @ 6.8.2019, 0:38) *

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

у меня такой формат не работает ... 180m работает
Fors1k
В описании на вики такой формат указан, но он, оказывается, и правда не работает. Значит в следующей версии по идее исправят.
Glosha
Цитата(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
Цитата(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
Цитата(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
Цитата(Glosha @ 7.8.2019, 17:21) *

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

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

Он просит эту строку в конце.
FREEON
Цитата(Glosha @ 7.8.2019, 17:21) *

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

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

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

Они есть и не очень большие. То ли 3 то ли 4 с чем-то часа. Связано, как я подозреваю, с переполнением переменной. Чтобы избежать таких проблем при больших задержках используйте циклы, как приведено выше.
Fors1k
Цитата(DarkMaster @ 9.8.2019, 18:31) *
Связано, как я подозреваю, с переполнением переменной.

Wait - это int? Получается он может вместить ~2.15 млрд мс, что равно ~600 часов. Значит даже wait 596h должно работать, разве нет? В описании у вэйта есть параметр h, но чет он сломался.
WKnight
Похоже со времен написания wait, символ h был зарезервирован. Скорее всего для указания шестнадцатеричного формата чисел. И wait так невзначай отвалился...
DarkMaster
Цитата
Wait - это int? Получается он может вместить ~2.15 млрд мс, что равно ~600 часов. Значит даже wait 596h должно работать, разве нет?

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

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
Цитата(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
Спасибо!
Glosha
тут разобрался.
еще пару вопросов:

а команда "set #d findcolor" работает в перекрытом окне?
у меня одного не возвращает курсор после клика? (в настройках стоит галка, возвращать)
Fors1k
• 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
Цитата(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
Цитата(Glosha @ 15.8.2019, 18:23) *

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

Все верно, если указан параметр abs, то искать будет только в видимой области, то есть в перекрытом окне не найдет. Замени abs на workwindow.
Glosha
Цитата(Fors1k @ 15.8.2019, 18:34) *

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

спасибо! подскажи, а у тебя работает функция "вернуть курсор назад после клика"? а можно еще указать на каком рабочем столе искать цвет?
Fors1k
Цитата(Glosha @ 16.8.2019, 9:48) *

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

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

Цвет, если я не ошибаюсь, пилот сможет искать только на том столе, который сейчас активен.
Glosha
Цитата(Fors1k @ 16.8.2019, 13:58) *

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

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

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

Запустить пилот от админа.
Glosha
Цитата(cirus @ 16.8.2019, 14:25) *

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

запущен, не помогает
Glosha
помогите пожалуйста с циклом, для меня слишком сложное решение...
пример:
есть 6 точек координат(условий), по ним нужно проверить соответствие цвета, если на 1 из них не найден цвет сделать клик, но клин нужен только внутри каждого условия отдельный и так зациклить пока не будет все 6 не соответствий. клик нужно делать только 1 раз после первого отказа в цвете.
Fors1k
Код
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
ну либо более простой вариант(азы так сказать)
Код

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
спасибо большое!
Glosha
во втором примере понятно, где проставлять клик под каждый 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
Цитата(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
Цитата(FREEON @ 18.8.2019, 14:49) *


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

спасибо огромное!
да, это два монитора))
у меня там даже просто log "текст" не срабатывает ... все работало, а тут че-то перестало реагировать.
FREEON
Ну на время тестов скриптов дал бы вам совет особенно если работаете с циклами это биндить кнопки в пилоте или при помощи плагина KB.zip. Кидать(распаковать) в папку Plugins, которая рядом с пилот должна быть создана. Более полную информацию можете посмотреть тут.

Пример кода который нужно располагать в циклах 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


Узнать другие коды клавиш плагина для скрипта можно при помощи утилиты Выложил dron4938.
Цитата

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

тогда проверяйте цвет или область поиска у вас там сканирует область размером 3х1 пикселя
Glosha
Цитата(FREEON @ 18.8.2019, 15:32) *

Ну на время тестов скриптов дал бы вам совет особенно если работаете с циклами это биндить кнопки в пилоте или при помощи плагина KB.zip. Кидать(распаковать) в папку Plugins, которая рядом с пилот должна быть создана. Более полную информацию можете посмотреть тут.

Пример кода который нужно располагать в циклах 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


Узнать другие коды клавиш плагина для скрипта можно при помощи утилиты Выложил dron4938.

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


откатил систему и все заработало. не знаю точно, но мне кажется багнулось, после того, как ушел в спящий режим с работающим скриптом.
Glosha
Цитата(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
Цитата(Glosha @ 18.8.2019, 20:48) *

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

мысли читать не умею вы опишите точки где идет поиск и где нужно сделать клик, либо нарисуйте схему... т.к. возможны различные варианты
Glosha
Цитата(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
Цитата(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
Цитата(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
спасибо огромное всем за помощь!

пс. подскажите, у меня пилот при составление координат цепляется к размеру кнопки, а не всего окна программы, но у меня там 15 кнопок и все одинакового размера... можно, как-то акцентировать на все окно? или только через "abs"?
Glosha
Цитата(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
Цитата(Glosha @ 19.8.2019, 10:47) *

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

можно, но это дело случая может сработать а может и нет...но суть такова просто снимаете координаты относительно первого привязанного окна .
Что под этим подразумеваю? ну нам нужно сделать привязку к окну где будем работать. Затем переходим в настройки пилота, далее выпавшем меню нажимаем Настройки, далее вкладка Mouse, Ищем строку Отображать координаты курсора и выбираем Относительные жмем Save. Всё теперь вверху пилота пишутся координаты при смещении курсора. Дале наводим курсор на кнопку но не снимая координаты(не нажимая ctrl+a) и не убирая мышку, переписываем относительные координаты на листик или запоминаем если память хорошая и затем вставляем в свой скрипт.
Ну либо через паинт или некоторые утилиты окна так же можно снимать положение точек относительно точки начала отсчета окна.
Но это либо будет работать либо нет. Есче как вариант можно через название окон кнопок попробовать...но первый это более сложный вариант
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2019 Invision Power Services, Inc.