Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Hito on March 07, 2019, 01:01:05 PM

Title: IF_PICTURE_IN - Для новичков
Post by: Hito on March 07, 2019, 01:01:05 PM
Очень часто вижу на форуме, как новички пытаются разобраться в том, как находить нужную картинку на экране. Мне это понятно, так как несколько лет назад сам тут ломал голову не одни сутки над этим ))) Решил написать для новичков подробный мануал на эту тему. Приступим...

1:
Начнем с того, что у  Clickermann-а, как и у других программ, нет реальных глаз, как у человека, и для того, чтобы "визуально" работать с экраном, ему нужно сделать снимок этого экрана и поместить в свой графический буфер. Вот этот снимок он и делает с помощью команды GETSCREEN. Если эта команада без координат, то Clickermann помещает в свой графический буфер скриншот ВСЕГО вашего экрана. Если же будут указаны координаты, как - GETSCREEN (x1, y1, x2, y2 ), то Clickermann поместит в свой графический буфер скриншот, сделанный строго в указанных координатах. Поехали дальше...

2:
Если после GETSCREEN (в следующей строке) вы используете команду COLORMODE и указываете режим COLORMODE-а, как - COLORMODE(5), то в буфер Clickermann-а поступает не та картинка, которая находится на вашем экране, а измененная, в зависимости от режима, указанного в команде COLORMODE. Для наглядности (чтобы было понятно) можно поиграться со следующим кодом. Только прежде, чем его запускать в кликере, сохраните этот скрипт в какую-либо папку.
Code: (clickermann) [Select]
GETSCREEN // Clickermann помещает в свой графический буфер скриншот вашего экрана
COLORMODE(3) // Применяет к этому скриншоту режим COLORMODE
SCREENSHOTFIX(0,0, $_xmax,$_ymax, "file.bmp") // Сохроняет скриншот, находящийся в его буфере, в папку, в которой будет сохранен этот скрипт
HALT // Останавливает скрипт
После того, как скрипт отработает, в папке, в которой он сохранен, появится скриншот вашего экрана. Откройте этот скриншот и посмотрите его. Потом установите в скрипте другой режим COLORMODE - к примеру COLORMODE(6), и повторите операцию. Вы увидите разницу, между первым скрином и тем, что появится во второй раз. Проанализировав эту разницу, вы можете понять - как работает команда COLORMODE. Идем далее...

3:
После того, как Clickermann отскринит ваш экран и поместит скрин в свой графический буфер, он будет готов приступить к анализу этого скриншота. В нашем случае, он будет готов к поиску вашей заготовленной картинки на том скриншоте, который находится в буфере Clickermann-а. Имейте в виду, что та заготовка картинки, которую вы будете искать, должна быть сделана в соответствующем режиме COLORMODE, который Clickermann применял к скриншоту вашего экрана, при помещении его в свой буфер, для анализа. Поиском картинки у нас занимается оператор - IF_PICTURE_IN. Не трудно понять, что перефразируя с английского языка, это выглядит как - ЕСЛИ_КАРТИНКА_В. И так, рассмотрим этот оператор подробнее...
Code: (clickermann) [Select]
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
// IF_PICTURE_IN - Это - оператор, который говорит Clickermann-у о том, чем он будет заниматься, а именно - искать картинку
// 0,0, $_xmax,$_ymax - Это координаты, в которых Clickermann будет искать картинку
// file.bmp - Это собственно наш заготовленный скриншот, который мы будем искать "на экране"
// О таких параметрах, как -1 и 100, вполне понятно написано в справке Clickermann-а
Думаю, что с этим тоже разобрались...

4:
Далее у нас идет оператор END_IF, говорящий о закрытии условия - ЕСЛИ_КАРТИНКА_В
Есть еще один оператор, который мы можем использовать во всей этой теме. Это - ELSE. Вариантов перевода этого оператора с английского языка не мало, но в нашем случае подходит вариант - ИНАЧЕ. Вот, как выглядит полностью наш скрипт вместе с этим оператором:
Code: (clickermann) [Select]
GETSCREEN // Clickermann помещает в свой графический буфер скриншот вашего экрана
COLORMODE(3) // Применяет к этому скриншоту режим COLORMODE
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100) // "ЕСЛИ_КАРТИНКА_В..." - ищет картинку в заданных координатах на скрине, находящемся в буфере.
   // Тут мы прописываем команды на случай, если картинка найдена.
ELSE // "ИНАЧЕ"
   // Тут прописываем действия на случай, если картинка не найдена.
END_IF // КОНЕЦ_"ЕСЛИ..." - конец условия

5:
Теперь создадим скрин, который в последствии будем искать на экране. Создадим скрин цифры "3:". Вставляем код в кликер, который дан в пункте "2:" этого поста, а далее смотрим видео...
https://www.youtube.com/watch?v=aasgn66DgtE (https://www.youtube.com/watch?v=aasgn66DgtE)
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on March 07, 2019, 03:25:39 PM
Еще необходимо описать процедуру подготовки и сохранения картинки в PAINT-е. У многих с этим возникают огромные трудности.
И можно в типовые алгоритмы отправлять.
Добавил )
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Alexxx on March 09, 2019, 02:33:59 PM
Спасибо за информацию. Проясните пару моментов, пожалуйста.
 1). Получение скриншота небольшой области экрана как то ускоряет процесс в сравнении со скриншотом всего экрана, скажем, в Windows7(10)?
 2). Как на скриншоте части экрана задаются координаты поиска нужной области - от края полученной картинки или от края экрана?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Oraven on March 09, 2019, 05:52:07 PM
Спасибо за информацию. Проясните пару моментов, пожалуйста.
 1). Получение скриншота небольшой области экрана как то ускоряет процесс в сравнении со скриншотом всего экрана, скажем, в Windows7(10)?
 2). Как на скриншоте части экрана задаются координаты поиска нужной области - от края полученной картинки или от края экрана?

1. При указании маленькой области снимка при разрешении например 1920х1080 сам процесс GETSCREEN отрабатывает в разы быстрее.

2. Размер скриншота не изменяется, просто обновляется только указанная область. Остальная часть снимка может содержать части старых снимков, если был снимок всего экрана, или вообще остаться черной.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on March 09, 2019, 05:56:32 PM
2. Размер скриншота не изменяется, просто обновляется только указанная область. Остальная часть снимка может содержать части старых снимков, если был снимок всего экрана, или вообще остаться черной.
Хм... А почему тогда, если я скриню пол экрана, то при SCREENSHOTFIX(0,0, $_xmax,$_ymax, "file.bmp"), у меня сохроняется скрин, на ктором только пол экрана...?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Oraven on March 09, 2019, 06:01:57 PM
Хм... А почему тогда, если я скриню пол экрана, то при SCREENSHOTFIX(0,0, $_xmax,$_ymax, "file.bmp"), у меня сохроняется скрин, на ктором только пол экрана...?

Запускаю код
Code: (clickermann) [Select]
GETSCREEN(100,100,500,500)
SCREENSHOTFIX(0,0, $_xmax,$_ymax, "file.bmp", 0)
HALT

В результате снимок равен размеру экрана, но при этом изменился только участок 100,100,500,500
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on March 09, 2019, 06:28:50 PM
Хм... А почему тогда, если я скриню пол экрана, то при SCREENSHOTFIX(0,0, $_xmax,$_ymax, "file.bmp"), у меня сохроняется скрин, на ктором только пол экрана...?

Запускаю код
Code: (clickermann) [Select]
GETSCREEN(100,100,500,500)
SCREENSHOTFIX(0,0, $_xmax,$_ymax, "file.bmp", 0)
HALT

В результате снимок равен размеру экрана, но при этом изменился только участок 100,100,500,500

Хм... Да...
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on March 09, 2019, 06:30:30 PM
Аааа... Я с привязкой к окну перепутал... В привязке если делаешь скрин, то "0,0, $_xmax,$_ymax" будет равно размеру окна, к которому кликер привязан.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Alexxx on March 14, 2019, 06:30:08 PM
Спасибо за развёрнутые ответы. А нет ли на форуме такой же темы для команды "IF_PIXEL_IN"? Поиск ничего не даёт. Не понятно, как прикрутить к команде какое либо действие при поиске нескольких цветов. Допустим, я ищу на участке скрина цвета красный и зелёный. Как сделать, что бы в зависимости от найденного цвета переменная принимала значение "1" (0), а в лог печаталось сообщение "красный" (зелёный)?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on March 14, 2019, 10:33:02 PM
Как сделать, что бы в зависимости от найденного цвета переменная принимала значение "1" (0), а в лог печаталось сообщение "красный" (зелёный)?

Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(0,0, $_xmax,$_ymax, 255)
   LOGWRITE ("Красный")
   $peremennaya = 1
else
   IF_PIXEL_IN(0,0, $_xmax,$_ymax, 122) // Я хз - какой там зеленый...
      LOGWRITE ("Зеленый")
      $peremennaya = 1
   else
      $peremennaya = 0
   END_IF
END_IF

IF($peremennaya)
   // какой-то цвет был найден - смотри лог
else
  // Никакого цвета не было найдено
END_IF
HALT
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on March 15, 2019, 01:38:11 AM
IF($peremennaya)
В данном случае $peremennaya выполняет функцию переменной типа - boolean. Если $peremennaya имеет значение - 0, то она является false, а если она имеет значение отличное от ноля, то она является true.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Kibes on March 15, 2019, 11:19:07 PM
Подскажите, а если мне нужно перебирать много картинок, скажем так:
001.bmp
002.bmp
003.bmp
...
010.bmp
Мне для каждого файла нужно писать отдельную процедуру, или можно прикрутить счетчик, что бы к конце файла добавляло +1
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Космич on March 15, 2019, 11:48:28 PM
Code: (clickermann) [Select]
FOR($count = 1, $count < 11)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT(STRCUT("00", 0, 3 - STRLEN($count)), $count, ".bmp"), -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
   END_IF
END_CYC
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Kibes on March 16, 2019, 01:05:10 AM
Спасибо, подстроил под чуть под свой код, все работает :)
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Омск on March 16, 2019, 07:48:25 PM
Я посмотрел видео и не понял, как используется картинка, которая скопирована из скриншота? Какая строчка кода ищет эту картинку?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on March 16, 2019, 10:31:09 PM
Я посмотрел видео и не понял, как используется картинка, которая скопирована из скриншота? Какая строчка кода ищет эту картинку?
Ппц... Кому все писал - хз...
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Alexxx on March 19, 2019, 07:28:27 PM
Code: (clickermann) [Select]
GETSCREEN
IF_PIXEL_IN(0,0, $_xmax,$_ymax, 255)
   LOGWRITE ("Красный")
   $peremennaya = 1
else
... 

у команды "IF_PIXEL_IN" есть блок "else"  :o ?! В справке про это ни слова нет. Это ко всем командам, начинающимися на "IF" относится?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Kibes on July 27, 2019, 12:53:25 AM
Code: (clickermann) [Select]
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
// IF_PICTURE_IN - Это - оператор, который говорит Clickermann-у о том, чем он будет заниматься, а именно - искать картинку
// 0,0, $_xmax,$_ymax - Это координаты, в которых Clickermann будет искать картинку
// file.bmp - Это собственно наш заготовленный скриншот, который мы будем искать "на экране"
// О таких параметрах, как -1 и 100, вполне понятно написано в справке Clickermann-а
Думаю, что с этим тоже разобрались...
Немножко не понятно, что за параметр -1, толи туплю, толи не могу разобраться.
В справке сказано, что bgcolor - необязательный параметр; игнорируемый цвет фона входного изображения. А что в примере обозночает -1?
Поясню в чем пытаюсь разобраться, я создаю картинку, где есть текст. Текст этот черными буквами, цвет его не меняется, а вот цвет фона меняется. Черный текст, на желтой или белой подложке... Можно ли как-то саму подложку игнорировать?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Oraven on July 27, 2019, 07:17:05 AM
Немножко не понятно, что за параметр -1, толи туплю, толи не могу разобраться.
В справке сказано, что bgcolor - необязательный параметр; игнорируемый цвет фона входного изображения. А что в примере обозночает -1?

-1 означает что прозрачность не используется. За место -1 ты должен указать цвет в твоей картинке который будет считаться за прозрачность. Просто выбери цвет, закрась им в графическом редакторе все лишнее и укажи этот цвет в функции.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: kirihor on December 19, 2019, 11:59:03 AM
Картинка на єкране появляется в интервале от 15 до 150 секунд. Как ее поймать что б не ждать постоянно по максимуму?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: kirihor on December 19, 2019, 02:22:51 PM
  GETSCREEN
IF_PICTURE_IN (233, 194, 970, 650, "yt_z.bmp")
   wait(5)
  lclick($_return1, $_return2)

GETSCREEN
  IF_PICTURE_IN (13, 33, 985, 71, "ok.bmp")
IF($t_wait = 0)
   WHILE(($_time_h ! 3)|($_time_m ! 5)) // ждем 03:05
      WAITMS(500)
       END_CYC
   $t_wait = 1
  wait(5)
  lclick($_return1, $return2)
  END_IF
  END_IF
  END_IF

Никак не может найти картинку ok.bmp. Поправьте, если не сложно, скрипт.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on January 01, 2020, 03:14:24 PM
  GETSCREEN
IF_PICTURE_IN (233, 194, 970, 650, "yt_z.bmp")
   wait(5)
  lclick($_return1, $_return2)

GETSCREEN
  IF_PICTURE_IN (13, 33, 985, 71, "ok.bmp")
IF($t_wait = 0)
   WHILE(($_time_h ! 3)|($_time_m ! 5)) // ждем 03:05
      WAITMS(500)
       END_CYC
   $t_wait = 1
  wait(5)
  lclick($_return1, $return2)
  END_IF
  END_IF
  END_IF

Никак не может найти картинку ok.bmp. Поправьте, если не сложно, скрипт.

Code: (clickermann) [Select]
GETSCREEN // Делаем скрин экрана в буфер кликера для анализа
IF_PICTURE_IN (233, 194, 970, 650, "yt_z.bmp") // Ищем на скрине yt_z.bmp в указанных координатах
   wait(5) // Это зачем?
   lclick($_return1, $_return2)
   
   GETSCREEN // Если wait(5) в третьей строке лишний, то и эта строка лишняя - скрин экрана мы уже сделали.
   IF_PICTURE_IN (13, 33, 985, 71, "ok.bmp") // Ищем на скрине ok.bmp в указанных координатах
      // А дальше что-то не понятное...
      IF($t_wait = 0)
         WHILE(($_time_h ! 3)|($_time_m ! 5)) // ждем 03:05
            WAITMS(500)
         END_CYC
         $t_wait = 1
         wait(5)
         lclick($_return1, $return2)
      END_IF
   END_IF
END_IF

Ты понимаешь, что у тебя вот этот цикл
Code: (clickermann) [Select]
WHILE(($_time_h ! 3)|($_time_m ! 5)) // ждем 03:05
   WAITMS(500)
END_CYC
будет крутиться, пока не наступит 3 часа, или любой час и 5 минут?

Ты объясни хоть задачу. А то у тебя в скрипте чепуха какая-то...
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Oraven on January 02, 2020, 06:15:13 PM
Ты понимаешь, что у тебя вот этот цикл
Code: (clickermann) [Select]
WHILE(($_time_h ! 3)|($_time_m ! 5)) // ждем 03:05
   WAITMS(500)
END_CYC
будет крутиться, пока не наступит 3 часа, или любой час и 5 минут?

Ты объясни хоть задачу. А то у тебя в скрипте чепуха какая-то...

Там же подписано что ждем 3:05, так и есть, цикл перестанет выполняться когда будет 3:5
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on January 02, 2020, 09:52:38 PM
Там же подписано что ждем 3:05, так и есть, цикл перестанет выполняться когда будет 3:5

Тогда может не так
Code: (clickermann) [Select]
WHILE(($_time_h ! 3)|($_time_m ! 5))А так...?
Code: (clickermann) [Select]
WHILE(($_time_h ! 3)&($_time_m ! 5))Я просто не понимаю - человеку нужно включить скрипт и лечь спать, а скрипт чтоб сработал ОДИН раз ночью? В 03:05?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on January 02, 2020, 10:05:38 PM
Не могу понять задачу по скрипту...
Title: Re: IF_PICTURE_IN - Для новичков
Post by: JacsoN on January 04, 2020, 02:42:42 AM
нет  Тех Задания  что  тут  понимать?)
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on January 04, 2020, 12:00:48 PM
Тогда может не так
Code: (clickermann) [Select]
WHILE(($_time_h ! 3)|($_time_m ! 5))А так...?
Code: (clickermann) [Select]
WHILE(($_time_h ! 3)&($_time_m ! 5))
Нет, всё правильно.

Не находит по причине, что и всегда. "OK" не совпадает полностью. Сглаживание текста, полупрозрачность и т.п.
Используй цветокоррекцию и % поиска.
Задержка должна быть не перед, а ПОСЛЕ клика.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: starweb on January 24, 2020, 11:58:49 PM
Всех приветствую. Может ошибся разделом, и нужно было запостить это в ошибках, но вероятно что это только у меня.
Ситуация в следующем. С помощью функции if_picture_in пытаюсь щелкнуть по элементу веб страницы (кнопка). Эта кнопка может появится в любом месте страницы. КМ находит картинку и выдает координаты, но они не совпадают с реальными координатами кнопки на странице. Я бы мог решить это добавив разницу между $_return1 , $_return2 и реальными координатами, но эта разница тоже меняется в зависимости от положения кнопки на экране. Самому трудно поверить, но это так. Скрины в приложении. Один снимок дисплея сделан с телефона что бы увидить где реально курсор находится, другой скриншот экрана. Использую КМ 14.4.003b . Windows 10. Может кто уже сталкивался с таким.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: starweb on January 25, 2020, 01:43:13 PM
хочу вас обрадовать - это заразно, но давным-давно лечится установлением масштаба рабочего стола на 100%
Спасибо! Помогло:) И я ж думал об этом. Но почему то ковырялся в спец возможностях. А оно в системе
Title: Re: IF_PICTURE_IN - Для новичков
Post by: tuturum on February 01, 2020, 02:32:15 PM
Ребят, может кто помочь со скриптом? Не дружу с ними совсем( Младший просит сделать поиск картинки на экране, клацать на нее мышкой и нажимать V постоянно.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: tuturum on February 01, 2020, 04:11:15 PM
Там только функции, я фиг знает какие вставлять и в каком порядке( Может есть какой-нить похожий скрипт? Я бы подредактил, с нуля не разберусь быстро, а сидеть несколько дней ради такого пустяка сами понимаете.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: tuturum on February 04, 2020, 01:26:05 PM
Премного благодарен! ) И еще пару вопросиков: кликер так и должен слегка задумываться пока картинку ищет? Около 3сек скрипт проходит. Работать работает, но только не в игре (roblox).
Title: Re: IF_PICTURE_IN - Для новичков
Post by: tuturum on February 04, 2020, 05:34:12 PM
Да, я уже разобрался что куда, покурил ман, толку ноль. Не видит хоть убейся. И colormode пробовал 6-8. Не видит хоть тресни. Может редактировать надо в каком-нить фотошопе, либо разрешение делать выше чем окно игры, не знаю.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: nesttek on February 20, 2020, 11:39:19 AM
Добрый день.
Прошу помочь со скриптом для 1С:УТ .
Не могу настроить переменную или (or?) , и под размер окна 1С дабы избавиться от большой нагрузки на процессор :
Суть такая , приходят заказы в 1С , они под разными именами попадают в базу(Допустим аренда\покупка и т.д) , далее хотел настроить оповещение во всплывающем окне или звуке на это событие , но из за большой нагрузки на процессор всё это происходит с большой задержкой (нагрузка кликермана 50-60% , машины довольно старые , c2d e8550)
Как можно оптимизировать код , чтобы он искал изображение с переменной "или" , т.к у меня получилось только через копирование всего кода .
 
И второй вопрос , не могу настроить размер окна ( не понимаю какие точки вписывать в getscreen )

Сам код:
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "аренда.bmp", -1, 100)
LOGWRITE ("аренда!")
HINTPOPUP("АРЕНДА", "АРЕНДА")
SOUND("play.wav")
END_IF
WAITMS(60)
//=============================================
 GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "аренда1.bmp", -1, 100)
LOGWRITE ("аренда!")
HINTPOPUP("АРЕНДА1", "АРЕНДА1")
SOUND("play.wav")
END_IF
WAITMS(60)
//=============================================
        GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "касса1.bmp", -1, 100)
LOGWRITE ("аренда!")
HINTPOPUP("КАССА1", "КАССА1")
SOUND("play.wav")
END_IF
WAITMS(460)
//=============================================
     GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "касса.bmp", -1, 100)
LOGWRITE ("аренда!")
HINTPOPUP("КАССА", "КАССА")
SOUND("play.wav")
END_IF
WAITMS(460)
//=============================================
     GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Касса2.bmp", -1, 100)
LOGWRITE ("аренда!")
HINTPOPUP("КАССА2", "КАССА2")
SOUND("play.wav")
END_IF
WAITMS(460)
//=============================================
                   GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Касса3.bmp", -1, 100)
LOGWRITE ("аренда!")
HINTPOPUP("КАССА3", "КАССА3")
SOUND("play.wav")
END_IF
WAITMS(640)
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on February 20, 2020, 01:53:03 PM
Задержки есть, значит основная нагрузка из-за больших размеров заготовленных картинок, их нужно уменьшить.
Если это текст, достаточно делать узкую полоску высотой 2-3 px по центру надписи.
Если произвольные иконки - область делать 3-5-10-15... до 50 px.
Стоит ещё ограничить GETSCREEN и поиск определённой областью. Наверняка же весь экран не нужен.

Code: (clickermann) [Select]
STRSEPARATE("аренда,аренда1,касса,касса1,касса2,касса3", ",", $block)
$size_block = ARRSIZE($block)

WHILE(1)
    GETSCREEN
    FOR($i=0, $i < $size_block)
        IF_PICTURE_IN(0,0, $_xmax,$_ymax, STRCONCAT($block[$i], ".bmp"))
            LOGWRITE(STRCONCAT($block[$i], "!"))
            HINTPOPUP($block[$i], $block[$i])
            SOUND("play.wav")
            WAITMS(460)
        ELSE
            WAITMS(30)
        END_IF
    END_CYC
    WAITMS(200)
END_CYC
Title: Re: IF_PICTURE_IN - Для новичков
Post by: nesttek on February 24, 2020, 08:12:20 AM
Спасибо! Помогло уменьшение размера картинок и уменьшение области экрана.
Еще один маленький вопросик ,  как на отдельную картинку выполнить действие? Например :   "касса" и "аренда" нужно нажатие f1. На остальных только оповещение .
Еще раз , большое спасибо!
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on February 25, 2020, 08:26:25 AM
Code: (clickermann) [Select]
STRSEPARATE("аренда,аренда1,касса,касса1,касса2,касса3", ",", $block)
$size_block = ARRSIZE($block)

WHILE(1)
    GETSCREEN
    FOR($i=0, $i < $size_block)
        IF_PICTURE_IN(0,0, $_xmax,$_ymax, STRCONCAT($block[$i], ".bmp"))
            IF(($i = 0) | ($i = 2))
                KEYPRESS(#F1)
                WAITMS(200)               
            END_IF
           
            LOGWRITE(STRCONCAT($block[$i], "!"))
            HINTPOPUP($block[$i], $block[$i])
            SOUND("play.wav")
            WAITMS(460)
        ELSE
            WAITMS(30)
        END_IF
    END_CYC
    WAITMS(200)
END_CYC
Title: Re: IF_PICTURE_IN - Для новичков
Post by: wert19s on April 05, 2020, 07:29:46 PM
Добрый вечер,

Голову сломал:

GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   BEEP(800,200)
     LOGWRITE ("BOMBA")
      DBLCLICK(493,99)
       WAIT(3)
   DBLCLICK(557,108)
ELSE // "ИНАЧЕ"
   BEEP(800,200)
   BEEP(800,200)
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

этот код не работает, когда не находит картинку то работает и пишет в лог О, а если находит то виснет кликер "не отвечает" закрываю его через диспечер.
и еще когда координаты оставляю :0,0 тоже виснет.
что может быть проблема?
спасибо
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Сексуальный украинец on April 05, 2020, 08:03:48 PM

Велика картинка і маленький відсоток збігу
Title: Re: IF_PICTURE_IN - Для новичков
Post by: wert19s on April 05, 2020, 09:36:00 PM

Велика картинка і маленький відсоток збігу


Подробней ???что поменять что бы работало?где поменять?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Oraven on April 06, 2020, 07:10:01 AM
Все функции начинающиеся с IF_ поддерживают ELSE так как являются своего рода условиями.

Единственное почему кликер во время поиска картинки может длительное время не отвечать, это чрезмерный размер картинки. Придерживайся размера 50х50 пикселов.

Title: Re: IF_PICTURE_IN - Для новичков
Post by: wert19s on April 07, 2020, 10:29:59 PM
че-т не выходит
я делаю скрин с задаными координатами там вырезаю картинку маленькую относительно а затем вставляю ее в кликер
запускаю кликер :
Getscreen  стоит на координатах 0,0 тоесть весь экран....менял на часть экрана...? что не так делаю?

Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on April 09, 2020, 12:58:05 AM
что не так делаю?
Еще один верующий, что тут телепаты...?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: wert19s on April 11, 2020, 11:42:19 PM
Ну делаю все по инструкции а не работает
виснет кликер приходится вырубать через диспечер
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on April 13, 2020, 08:12:05 AM
Ну делаю все по инструкции а не работает
виснет кликер приходится вырубать через диспечер
Я к тому, что код надо выкладывать. Никто же не знает - что ты там по инструкции намутил...
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Svetiik on April 18, 2020, 09:11:16 AM
Подскажите пожалуйста можно ли прописать в скрипте , чтоб автоматически ставилась дата первого запуска скрипта и к этой дате прибавлялось 3 дня и он выполнял действие (но скрипт не работает все 3 дня , а включается примерно на час в день )
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Чольшой Блен on April 18, 2020, 09:17:54 AM
Подскажите пожалуйста можно ли прописать в скрипте , чтоб автоматически ставилась дата первого запуска скрипта и к этой дате прибавлялось 3 дня и он выполнял действие (но скрипт не работает все 3 дня , а включается примерно на час в день )
Ну конечно можно, при пуске проверять текстовый файл, считывая там последнюю записанную дату и сравнивать с текущей.
В зависимости от результатов сравнения, либо выполнять действие, либо записывать новую дату, если прошло более трёх дней и нужно повторить первый пуск и отсчёт от него.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Svetiik on April 18, 2020, 10:07:17 AM
Подскажите пожалуйста можно ли прописать в скрипте , чтоб автоматически ставилась дата первого запуска скрипта и к этой дате прибавлялось 3 дня и он выполнял действие (но скрипт не работает все 3 дня , а включается примерно на час в день )
Ну конечно можно, при пуске проверять текстовый файл, считывая там последнюю записанную дату и сравнивать с текущей.
В зависимости от результатов сравнения, либо выполнять действие, либо записывать новую дату, если прошло более трёх дней и нужно повторить первый пуск и отсчёт от него.

Я тут новичок , можете написать примерно как должен выглядеть скрипт ?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Чольшой Блен on April 18, 2020, 12:52:50 PM
Я тут новичок , можете написать примерно как должен выглядеть скрипт ?
НОВИЧОК?!!  Привет, Петрову и Боширову!  ;D
Если память мне не врёт, то на форуме и COVID-19 уже регистрировался! :o

Ну конечно напишу.
Скрипт  должен выглядеть, как показано в примерах справки и меню готовых шаблонов.
Каждый интересующийся Новичёк должен сначала прочесть их, а потом уточнять на форуме, то что осталось неясным.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Svetiik on April 18, 2020, 02:31:13 PM
Я тут новичок , можете написать примерно как должен выглядеть скрипт ?
НОВИЧОК?!!  Привет, Петрову и Боширову!  ;D
Если память мне не врёт, то на форуме и COVID-19 уже регистрировался! :o

Ну конечно напишу.
Скрипт  должен выглядеть, как показано в примерах справки и меню готовых шаблонов.
Каждый интересующийся Новичёк должен сначала прочесть их, а потом уточнять на форуме, то что осталось неясным.
Я не знаю почему , но справка у меня не открывается 😭
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on April 19, 2020, 02:00:45 PM
Я не знаю почему , но справка у меня не открывается 😭
В папке с программой лежит ненужный файл "Если не открывается справка.txt". Ни в коем случае в него не заглядывать! Он совсем не про справку, название обманчиво и сделано для ввода новичков в заблуждение.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Daimond on April 28, 2020, 06:15:40 PM
     Здравствуйте ,уважаемые форумчане! Скажите плиз как правильно написать скрипт?
     Дано:
Инвентарь с ячейками вертикальный,в нем случайным порядком располагаются одинаковые предметы кольца. Ну по внешн. виду одно и тоже.
     П.С. (делаю картинку в bmp 24 бит(несколько пискелей где то). Получается продать только один предмет в определенном слоте и все до и дальше по области не ищет и не даблкликает(не продается).
     Необходимо: находить по пикселю или по картинке (лучше) все кольца  в инвентаре от верхнего лев. угла до правого нижнего и продавать их двойным кликом левой кн мыши по очереди слева направо. ЧТобы без привязки к определенным координатам и не тыкало в одно и тоже место. Игра в окне, разрешение 1024 на 768 в левой верхнем угру монитора фуллхд, мин настройки графики.
Спасибо. Желательно поменьше нагрузку на ОС(проц) и чтоб без палева( ну эт так к слову)
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on April 28, 2020, 06:31:06 PM
     Здравствуйте ,уважаемые форумчане! Скажите плиз как правильно написать скрипт?
     Дано:
Инвентарь с ячейками вертикальный,в нем случайным порядком располагаются одинаковые предметы кольца. Ну по внешн. виду одно и тоже.
     П.С. (делаю картинку в bmp 24 бит(несколько пискелей где то). Получается продать только один предмет в определенном слоте и все до и дальше по области не ищет и не даблкликает(не продается).
     Необходимо: находить по пикселю или по картинке (лучше) все кольца  в инвентаре от верхнего лев. угла до правого нижнего и продавать их двойным кликом левой кн мыши по очереди слева направо. ЧТобы без привязки к определенным координатам и не тыкало в одно и тоже место. Игра в окне, разрешение 1024 на 768 в левой верхнем угру монитора фуллхд, мин настройки графики.
Спасибо. Желательно поменьше нагрузку на ОС(проц) и чтоб без палева( ну эт так к слову)
Прочти хотя бы эту страницу форума... Начиная со второго сообщения сверху.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Daimond on May 03, 2020, 11:48:43 AM
Ясно-понятно. Жаль конечно, что не работает и ответ таков. Я же приложил свой скрипт и он не пашет,хотя в моем понимании слева направо по картинке должен находить и даблкликать,а ннет) У меня уже есть пару скриптов от мала до среднего с подпрограммой. Там работает хоть и иногда слетает по неизвестным причинам. Игра та же скрипт не изменяется, а иногда не работает. Наверное игроделы что-то мутят или кликер тупит, или еще что-то. Может нужны новые переменные и команды, но почему то картинку только одну находоит в опред. месте, а до нее такая же , но не ищет и дальше тоже.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on May 03, 2020, 04:31:54 PM
Если 'такая же' но не находит, то варианта всего два. Не попадает в область поиска или какртинка та, да не та. Она отличается. С вероятностью 99.99% это так, можешь даже не спорить. Возьми эти две картинки и наложи слоями в фотошопе, либо сразу увидишь разницу либо включив режим наложения 'разница' выделить волшебной палочкой с нулевыми допусками цвет 0,0,0. Всё что не попадает - отличается. Там же увидишь значения цвета в одной точке.
Так работает масштабирование во флеш и сглаживание везде.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: wert19s on May 15, 2020, 12:59:43 PM
Ну делаю все по инструкции а не работает
виснет кликер приходится вырубать через диспечер
Я к тому, что код надо выкладывать. Никто же не знает - что ты там по инструкции намутил...

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


Code: [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   colormode(5)
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Vhod.bmp", -1, 75)
      $check = 1
      LCLICK($_return1, $_return2)
      print("da")
      WAITM(3)
   ELSE
      print("net")
   END_IF
END_CYC
вот у меня такой примитивный  код для в входа в игру
вопрос: мне нужно вот таких кликов по картинку ну наверное штук 10-15 для одного окна как мне уменшить код  что не писать этот код 15 раз если возможно конечно.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: wert19s on May 15, 2020, 02:28:41 PM
Code: (clickermann) [Select]
FOR($count = 1, $count < 11)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT(STRCUT("00", 0, 3 - STRLEN($count)), $count, ".bmp"), -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
   END_IF
END_CYC



Я новичек  можна дословно обьяснить что точно он делает?

Я понимаю что он ищет из 10 или 11 картинок-заготовок и если находит одну из них то делает действия или если он находит все то делает?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on May 15, 2020, 04:06:26 PM
Code: (clickermann) [Select]
FOR($count = 1, $count < 11)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT(STRCUT("00", 0, 3 - STRLEN($count)), $count, ".bmp"), -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
   END_IF
END_CYC



Я новичек  можна дословно обьяснить что точно он делает?

Я понимаю что он ищет из 10 или 11 картинок-заготовок и если находит одну из них то делает действия или если он находит все то делает?

Цикл, "заряженный" на 10 повторений и ищущий картинки. Рядом со скриптом (в одной папке с ним) находится 10 картинок, типа - с 001.bmp до 010.bmp. Вот он их в цикле и ищет. Я бы поместил бы все нужные картинки в отдельную папку и в скрипте взял бы содержимое папки в массив, а уже проходясь по массиву искал бы картинки.

Code: (clickermann) [Select]
IF($click_time < $_ms) // Если после последнего клика прошла секунда
   getfilelist($pic, "папка\*.bmp") // Забираем в массив все картинки из папки
   GETSCREEN // Делаем скрин экрана
   FOR($a=0,$a<arrsize($pic)) // Запускаем цикл по массиву
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, $pic[$a], -1, 100) // Если картинка найдена
         LCLICK($_return1, $_return2) // Кликаем по ней
         $click_time = $_ms+1000 // Заводим таймер клика на секунду
         $a=9999 // Увеличиваем переменную для выхода из цикла
      END_IF
   END_CYC
   UNDEFINE ($pic) // Обнуляем массив
END_IF
WAITMS(50)

Единственное что, не помню - есть ли в версиях ниже 4.14, getfilelist...
Title: Re: IF_PICTURE_IN - Для новичков
Post by: wert19s on May 15, 2020, 08:58:27 PM
Code: (clickermann) [Select]
FOR($count = 1, $count < 11)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT(STRCUT("00", 0, 3 - STRLEN($count)), $count, ".bmp"), -1, 100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
   END_IF
END_CYC



Я новичек  можна дословно обьяснить что точно он делает?

Я понимаю что он ищет из 10 или 11 картинок-заготовок и если находит одну из них то делает действия или если он находит все то делает?

Цикл, "заряженный" на 10 повторений и ищущий картинки. Рядом со скриптом (в одной папке с ним) находится 10 картинок, типа - с 001.bmp до 010.bmp. Вот он их в цикле и ищет. Я бы поместил бы все нужные картинки в отдельную папку и в скрипте взял бы содержимое папки в массив, а уже проходясь по массиву искал бы картинки.

Code: (clickermann) [Select]
IF($click_time < $_ms) // Если после последнего клика прошла секунда
   getfilelist($pic, "папка\*.bmp") // Забираем в массив все картинки из папки
   GETSCREEN // Делаем скрин экрана
   FOR($a=0,$a<arrsize($pic)) // Запускаем цикл по массиву
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, $pic[$a], -1, 100) // Если картинка найдена
         LCLICK($_return1, $_return2) // Кликаем по ней
         $click_time = $_ms+1000 // Заводим таймер клика на секунду
         $a=9999 // Увеличиваем переменную для выхода из цикла
      END_IF
   END_CYC
   UNDEFINE ($pic) // Обнуляем массив
END_IF
WAITMS(50)

Единственное что, не помню - есть ли в версиях ниже 4.14, getfilelist...
a если есть 2 картинки которые находит как определяет кто первыи а кто второй из-за нумерации?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on May 15, 2020, 09:20:59 PM
a если есть 2 картинки которые находит как определяет кто первыи а кто второй из-за нумерации?
Ну так пронумеруй их в названии последовательно. Ты вопросы задаешь уже не нужные - экспериментируй.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: wert19s on May 17, 2020, 10:45:29 PM
Добрый вечер еще 3 вопросa : игры маил.ру там как бы заходишь в верхнюю панел далее охота открывается окошко флеш тоесть на этом окошке кликер должен найти картинку вопрос делать так же как и обычно без всяких дополнений?или для флеша нужно что-то особенное?
2.и еще : как реализовать нахождение картинки и клик к примеру на 2 сантиметра ниже/выше в сторону? возможно ли?
3. черный цвет не находит с colormode 5 может не применять к черному?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: wert19s on May 19, 2020, 10:06:25 PM
Code: [Select]
1:
 wait(1)
LCLICK(624,189)  // zapad
 wait(3)
$check = 0
WHILE($check = 0)
   GETSCREEN
   colormode(5)
   IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
      $check = 1
      print("Boy")
      LCLICK($_return1-32, $_return2-18)
      wait(3)
      LCLICK(363,187)  // 2373236
      wait(3)
      LCLICK(698,340)  // 6184542
      wait(4)
      LCLICK(698,340)  // 6184542
      wait(5)
      DBLCLICK(704,100)  // 10127201
      wait(3)
      DBLCLICK(704,100)  // 10127201
      WAITM(3)
   ELSE
      print("net")
       GOTO(2)
   END_IF
END_CYC


2:
wait(1)
LCLICK(668,203)  // yug
 wait(3)
$check = 0
WHILE($check = 0)
   GETSCREEN
   colormode(5)
   IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
      $check = 1
      LCLICK($_return1-32, $_return2-18)
      wait(3)
      LCLICK(363,187)  // 2373236
      wait(3)
      LCLICK(698,340)  // 6184542
      wait(4)
      LCLICK(698,340)  // 6184542
      wait(5)
      DBLCLICK(704,100)  // 10127201
      wait(3)
      DBLCLICK(704,100)  // 10127201
      print("Boy")
      WAITM(3)
   ELSE
      print("net")
       GOTO(3)
   END_IF
END_CYC


3:
wait(1)
LCLICK(723,186)  // vostok
wait(3)
$check = 0
WHILE($check = 0)
   GETSCREEN
   colormode(5)
   IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
      $check = 1
      LCLICK($_return1-32, $_return2-18)
      wait(3)
      LCLICK(363,187)  // 2373236
      wait(3)
      LCLICK(698,340)  // 6184542
      wait(4)
      LCLICK(698,340)  // 6184542
      wait(5)
      DBLCLICK(704,100)  // 10127201
      wait(3)
      DBLCLICK(704,100)  // 10127201
      print("Boy")
      WAITM(3)
   ELSE
      print("net")
        GOTO(4)
   END_IF
END_CYC

4:
wait(1)

LCLICK(670,180)  // sever
wait(3)
$check = 0
WHILE($check = 0)
   GETSCREEN
   colormode(5)
   IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
      $check = 1
      LCLICK($_return1-32, $_return2-18)
      wait(3)
      LCLICK(363,187)  // 2373236
      wait(3)
      LCLICK(698,340)  // 6184542
      wait(4)
      LCLICK(698,340)  // 6184542
      wait(5)
      DBLCLICK(704,100)  // 10127201
      wait(3)
      DBLCLICK(704,100)  // 10127201
      print("Boy")
      WAIT(3)
   ELSE
      print("net")
         GOTO(1)
   END_IF
END_CYC
ну вот наконец сделал: кликабельнный только серый цвет не смог его найти но есть и яркий зеленый его нашел ну и подправил клик как видите по координаты серого цвета.
Спасибо всем кто помог




Можно ли этот код как-то упростить?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on May 20, 2020, 06:17:25 AM
Code: [Select]
1:
 wait(1)
LCLICK(624,189)  // zapad
 wait(3)
$check = 0
WHILE($check = 0)
   GETSCREEN
   colormode(5)
   IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
      $check = 1
      print("Boy")
      LCLICK($_return1-32, $_return2-18)
      wait(3)
      LCLICK(363,187)  // 2373236
      wait(3)
      LCLICK(698,340)  // 6184542
      wait(4)
      LCLICK(698,340)  // 6184542
      wait(5)
      DBLCLICK(704,100)  // 10127201
      wait(3)
      DBLCLICK(704,100)  // 10127201
      WAITM(3)
   ELSE
      print("net")
       GOTO(2)
   END_IF
END_CYC


2:
wait(1)
LCLICK(668,203)  // yug
 wait(3)
$check = 0
WHILE($check = 0)
   GETSCREEN
   colormode(5)
   IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
      $check = 1
      LCLICK($_return1-32, $_return2-18)
      wait(3)
      LCLICK(363,187)  // 2373236
      wait(3)
      LCLICK(698,340)  // 6184542
      wait(4)
      LCLICK(698,340)  // 6184542
      wait(5)
      DBLCLICK(704,100)  // 10127201
      wait(3)
      DBLCLICK(704,100)  // 10127201
      print("Boy")
      WAITM(3)
   ELSE
      print("net")
       GOTO(3)
   END_IF
END_CYC


3:
wait(1)
LCLICK(723,186)  // vostok
wait(3)
$check = 0
WHILE($check = 0)
   GETSCREEN
   colormode(5)
   IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
      $check = 1
      LCLICK($_return1-32, $_return2-18)
      wait(3)
      LCLICK(363,187)  // 2373236
      wait(3)
      LCLICK(698,340)  // 6184542
      wait(4)
      LCLICK(698,340)  // 6184542
      wait(5)
      DBLCLICK(704,100)  // 10127201
      wait(3)
      DBLCLICK(704,100)  // 10127201
      print("Boy")
      WAITM(3)
   ELSE
      print("net")
        GOTO(4)
   END_IF
END_CYC

4:
wait(1)

LCLICK(670,180)  // sever
wait(3)
$check = 0
WHILE($check = 0)
   GETSCREEN
   colormode(5)
   IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
      $check = 1
      LCLICK($_return1-32, $_return2-18)
      wait(3)
      LCLICK(363,187)  // 2373236
      wait(3)
      LCLICK(698,340)  // 6184542
      wait(4)
      LCLICK(698,340)  // 6184542
      wait(5)
      DBLCLICK(704,100)  // 10127201
      wait(3)
      DBLCLICK(704,100)  // 10127201
      print("Boy")
      WAIT(3)
   ELSE
      print("net")
         GOTO(1)
   END_IF
END_CYC
ну вот наконец сделал: кликабельнный только серый цвет не смог его найти но есть и яркий зеленый его нашел ну и подправил клик как видите по координаты серого цвета.
Спасибо всем кто помог




Можно ли этот код как-то упростить?

Ребят, вы что такие зацикленные на циклах...? Тебе зачем все эти циклы в скрипте...? Да к тому же циклы, из которых ты выскакиваешь при ЛЮБОМ условии, либо при помощи $check = 1, либо при помощи GOTO (во втором случае еще и ломая весь цикл)... Да еще и в каждом цикле ища одну и ту же картинку и производя одни и те же действия... Кто вас подсаживает на этот маразм...?
Вот всё,что тебе надо:

Code: (clickermann) [Select]
IF($click_timer < $_ms)
   IF($click = 0)
      SWITCH($mir)
         CASE(0)
            LCLICK(624,189)  // zapad
            $mir = 1
         CASE(1)
            LCLICK(668,203)  // yug
            $mir = 2
         CASE(2)
            LCLICK(723,186)  // vostok
            $mir = 3
         CASE(3)
            LCLICK(670,180)  // sever
            $mir = 0
      END_SWITCH
      $click = 1
      $click_timer = $_ms+3000
   else
      GETSCREEN
      colormode(5)
      IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
         print("Boy")
         LCLICK($_return1-32, $_return2-18)
         wait(3)
         LCLICK(363,187)  // 2373236
         wait(3)
         LCLICK(698,340)  // 6184542
         wait(4)
         LCLICK(698,340)  // 6184542
         wait(5)
         DBLCLICK(704,100)  // 10127201
         wait(3)
         DBLCLICK(704,100)  // 10127201
 
         $click_timer = $_ms+3000
         $click = 0
      END_IF
   END_IF
END_IF
WAITMS(50)

И вот так еще можно:

Code: (clickermann) [Select]
$x[0] = 624
$y[0] = 189
$x[1] = 668
$y[1] = 203
$x[2] = 723
$y[2] = 186
$x[3] = 670
$y[3] = 180

IF($click_timer < $_ms)
   IF($click = 0)
      LCLICK($x[$i],$y[$i])
      IF($i < 4)
         INC($i,1)
      else
         $i = 0
      END_IF
      $click = 1
      $click_timer = $_ms+3000
   else
      GETSCREEN
      colormode(5)
      IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
         print("Boy")
         LCLICK($_return1-32, $_return2-18)
         wait(3)
         LCLICK(363,187)  // 2373236
         wait(3)
         LCLICK(698,340)  // 6184542
         wait(4)
         LCLICK(698,340)  // 6184542
         wait(5)
         DBLCLICK(704,100)  // 10127201
         wait(3)
         DBLCLICK(704,100)  // 10127201
         
         $click_timer = $_ms+3000
         $click = 0
      END_IF
   END_IF
END_IF
WAITMS(50)

И вообще я бы все твои "wait" позаменял на таймеры. В скрипте в идеале должна быть одна пауза - в конце, для разгрузки процессора. Скрипт не должен висеть на паузах - он должен контролить все и вся на каждом кругу, с одной паузой.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: wert19s on May 20, 2020, 10:49:01 PM
Code: [Select]
1:
 wait(1)
LCLICK(624,189)  // zapad
 wait(3)
$check = 0
WHILE($check = 0)
   GETSCREEN
   colormode(5)
   IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
      $check = 1
      print("Boy")
      LCLICK($_return1-32, $_return2-18)
      wait(3)
      LCLICK(363,187)  // 2373236
      wait(3)
      LCLICK(698,340)  // 6184542
      wait(4)
      LCLICK(698,340)  // 6184542
      wait(5)
      DBLCLICK(704,100)  // 10127201
      wait(3)
      DBLCLICK(704,100)  // 10127201
      WAITM(3)
   ELSE
      print("net")
       GOTO(2)
   END_IF
END_CYC


2:
wait(1)
LCLICK(668,203)  // yug
 wait(3)
$check = 0
WHILE($check = 0)
   GETSCREEN
   colormode(5)
   IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
      $check = 1
      LCLICK($_return1-32, $_return2-18)
      wait(3)
      LCLICK(363,187)  // 2373236
      wait(3)
      LCLICK(698,340)  // 6184542
      wait(4)
      LCLICK(698,340)  // 6184542
      wait(5)
      DBLCLICK(704,100)  // 10127201
      wait(3)
      DBLCLICK(704,100)  // 10127201
      print("Boy")
      WAITM(3)
   ELSE
      print("net")
       GOTO(3)
   END_IF
END_CYC


3:
wait(1)
LCLICK(723,186)  // vostok
wait(3)
$check = 0
WHILE($check = 0)
   GETSCREEN
   colormode(5)
   IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
      $check = 1
      LCLICK($_return1-32, $_return2-18)
      wait(3)
      LCLICK(363,187)  // 2373236
      wait(3)
      LCLICK(698,340)  // 6184542
      wait(4)
      LCLICK(698,340)  // 6184542
      wait(5)
      DBLCLICK(704,100)  // 10127201
      wait(3)
      DBLCLICK(704,100)  // 10127201
      print("Boy")
      WAITM(3)
   ELSE
      print("net")
        GOTO(4)
   END_IF
END_CYC

4:
wait(1)

LCLICK(670,180)  // sever
wait(3)
$check = 0
WHILE($check = 0)
   GETSCREEN
   colormode(5)
   IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
      $check = 1
      LCLICK($_return1-32, $_return2-18)
      wait(3)
      LCLICK(363,187)  // 2373236
      wait(3)
      LCLICK(698,340)  // 6184542
      wait(4)
      LCLICK(698,340)  // 6184542
      wait(5)
      DBLCLICK(704,100)  // 10127201
      wait(3)
      DBLCLICK(704,100)  // 10127201
      print("Boy")
      WAIT(3)
   ELSE
      print("net")
         GOTO(1)
   END_IF
END_CYC
ну вот наконец сделал: кликабельнный только серый цвет не смог его найти но есть и яркий зеленый его нашел ну и подправил клик как видите по координаты серого цвета.
Спасибо всем кто помог




Можно ли этот код как-то упростить?

Ребят, вы что такие зацикленные на циклах...? Тебе зачем все эти циклы в скрипте...? Да к тому же циклы, из которых ты выскакиваешь при ЛЮБОМ условии, либо при помощи $check = 1, либо при помощи GOTO (во втором случае еще и ломая весь цикл)... Да еще и в каждом цикле ища одну и ту же картинку и производя одни и те же действия... Кто вас подсаживает на этот маразм...?
Вот всё,что тебе надо:

Code: (clickermann) [Select]
IF($click_timer < $_ms)
   IF($click = 0)
      SWITCH($mir)
         CASE(0)
            LCLICK(624,189)  // zapad
            $mir = 1
         CASE(1)
            LCLICK(668,203)  // yug
            $mir = 2
         CASE(2)
            LCLICK(723,186)  // vostok
            $mir = 3
         CASE(3)
            LCLICK(670,180)  // sever
            $mir = 0
      END_SWITCH
      $click = 1
      $click_timer = $_ms+3000
   else
      GETSCREEN
      colormode(5)
      IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
         print("Boy")
         LCLICK($_return1-32, $_return2-18)
         wait(3)
         LCLICK(363,187)  // 2373236
         wait(3)
         LCLICK(698,340)  // 6184542
         wait(4)
         LCLICK(698,340)  // 6184542
         wait(5)
         DBLCLICK(704,100)  // 10127201
         wait(3)
         DBLCLICK(704,100)  // 10127201
 
         $click_timer = $_ms+3000
         $click = 0
      END_IF
   END_IF
END_IF
WAITMS(50)

И вот так еще можно:

Code: (clickermann) [Select]
$x[0] = 624
$y[0] = 189
$x[1] = 668
$y[1] = 203
$x[2] = 723
$y[2] = 186
$x[3] = 670
$y[3] = 180

IF($click_timer < $_ms)
   IF($click = 0)
      LCLICK($x[$i],$y[$i])
      IF($i < 4)
         INC($i,1)
      else
         $i = 0
      END_IF
      $click = 1
      $click_timer = $_ms+3000
   else
      GETSCREEN
      colormode(5)
      IF_PICTURE_IN (0,0,$_xmax,$_xmax, "1.bmp", -1, 65)
         print("Boy")
         LCLICK($_return1-32, $_return2-18)
         wait(3)
         LCLICK(363,187)  // 2373236
         wait(3)
         LCLICK(698,340)  // 6184542
         wait(4)
         LCLICK(698,340)  // 6184542
         wait(5)
         DBLCLICK(704,100)  // 10127201
         wait(3)
         DBLCLICK(704,100)  // 10127201
         
         $click_timer = $_ms+3000
         $click = 0
      END_IF
   END_IF
END_IF
WAITMS(50)

И вообще я бы все твои "wait" позаменял на таймеры. В скрипте в идеале должна быть одна пауза - в конце, для разгрузки процессора. Скрипт не должен висеть на паузах - он должен контролить все и вся на каждом кругу, с одной паузой.

Для начала спасибо большое, но я сделал то что смог ваших знаний у меня нет, были бы наверное так же отвечал бы :)))а может и нет, сечас проверю как работает выглядит намного красивее и круто:)))даже не знал об этих командах ....
цыклы ломал что переклчится с окна на окно в игре...
а вот только после месяца понял как правильно скрины делать и то черный не находит...
Спасибо еще раз
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on May 21, 2020, 09:25:05 PM
Только во втором варианте IF($i < 4) замени на IF($i < 3). Ошибся на единицу...
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Мыха on January 03, 2021, 08:59:23 AM
вот что не получается. В bluestacks запущено андроид приложение. Задача - проверять наличие нужной кнопки, если она есть - нажимать на неё и т.д. каждое состояние по отдельности срабатывает замечательно, до состояния 2 всё вместе срабатывает замечательно, а на третьем состоянии - распознавание экрана не срабатывает, выдаёт ошибку по условию else. Что я не знаю?

Code: (clickermann) [Select]
$S_CORR = 0
//проверяем состояние 0
GETSCREEN
COLORMODE(3)
IF_PICTURE_IN(478,708, 520,717, "0.bmp", -1, 100)
ELSE
print("ошибка состояния 0")
END_IF
waitms(1000 + $S_CORR)
//проверяем состояние 1
GETSCREEN
COLORMODE(3)
IF_PICTURE_IN(556,709, 597,717, "1.bmp", -1, 100)
  waitms(200 + $S_CORR)
move(577,697)
waitms(200 + $S_CORR)
move(578,698)
waitms(200 + $S_CORR)
move(577,697)
waitms(200 + $S_CORR)
move(577,697)
lDown(577,697)
waitms(100 + $S_CORR)
  lUp(577,697)
ELSE
print("ошибка состояния 1")
END_IF
waitms(1000 + $S_CORR)
//проверяем состояние 2
GETSCREEN
COLORMODE(3)
IF_PICTURE_IN(515,598, 627,611, "2.bmp", -1, 100)
  waitms(200 + $S_CORR)
move(566,605)
waitms(200 + $S_CORR)
move(567,606)
waitms(200 + $S_CORR)
move(567,605)
waitms(200 + $S_CORR)
move(567,605)
lDown(567,605)
waitms(100 + $S_CORR)
  lUp(567,605)
ELSE
print("ошибка состояния 2")
END_IF
waitms(1000 + $S_CORR)
//проверяем состояние 3"
GETSCREEN
COLORMODE(3)
IF_PICTURE_IN(516,648, 566,661, "3.bmp", -1, 100)
  waitms(200 + $S_CORR)
move(542,656)
waitms(200 + $S_CORR)
move(543,657)
waitms(200 + $S_CORR)
move(542,656)
waitms(200 + $S_CORR)
move(542,656)
lDown(542,656)
waitms(100 + $S_CORR)
  lUp(542,656)
ELSE
print("ошибка состояния 3")
END_IF
waitms(1000 + $S_CORR)

halt
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Мыха on January 03, 2021, 08:45:30 PM
ты не знаешь, что такое ELSE для IF_PICTURE_IN
это ни какая ни ошибка состояния, а  предусмотренное скриптом отсутствие указанной картинки, именно  на момент проверки.
waitms(1000 + $S_CORR)
//проверяем состояние 3"
этой задержки недостаточно, чтоб проверяемая картинка успела загрузиться.

в иной ситуации я бы спросил про Ваше знание и понимание применения команды print, а в этой ситуации благодарю и попробую, что получится
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Мыха on January 03, 2021, 08:59:59 PM
да, прокатило! урок усвоен. мои благодарности.

З.Ы. print (ошибка состояния) используется для отладки, чтобы знать, где упало.

Еще раз спасибо
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Мыха on January 05, 2021, 11:44:52 PM
приветствую уважаемую публику

вскочил такой вопрос

типовая задача примерно такая. нажимаем на ссылку и ждём загрузки страницы. страница может загрузиться быстро, может - медленно, может вообще не загрузиться, может загрузиться не та, что хотелось бы. Фрагмент страницы, указывающей на её правильную загрузку, естественно заранее лежит в bmp файле. Хотелка состоит в том, чтобы не ждать по 10 - 20 секунд, перед единственной проверкой  IF_PICTURE_IN, а проверять в цикле, с интервалом например 2 ... 3 секунды. У меня сложилась идея решения, которая мне не очень нравится, а другого придумать не могу. Вот так можно делать? Заранее извиняюсь, (весь синтаксис операторов кликерманна пока не освоил, но смысл логических действий ведь везде одинаковый)

(запуск загрузки интернет страницы)
n=1
метка a
getscreen (все параметры)
colormode (все параметры)
IF_PICTURE_IN(все параметры)
(что делать, когда правильно загрузится)
else
ждать 1 секунду//или 2 ...3 секунды, по конкретной ситуации
n=n+1
     если n<10//или любое другое подходящее количество повторов
     переход по метке a
     иначе
     (действия в случае неудачи, вероятно выход из цикла переходом по отдельной метке)
     конец если
END_IF

такие вылеты из циклов и операторов условий допустимы? нормальны? или это как то по иному нужно запиливать?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on January 06, 2021, 03:59:57 PM
Шаблоны -- Графика -- Ожидание картинки
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Мыха on January 06, 2021, 07:26:55 PM
крутяк!

Code: (clickermann) [Select]
$check = 0
WHILE($check = 0)
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
      $check = 1
      LCLICK($_return1, $_return2)
      WAITMS(100)
   ELSE
      WAITMS(50)
   END_IF
END_CYC

но я не понимаю, что здесь означает левый клик по координатам $_return1, $_return2 ? и что это вообще за координаты? где еще есть мануалы?

и еще такой вопрос. есть ли мануалы, которые объясняют, что за параметры в операторе IF_PICTURE_IN после имени файла?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on January 07, 2021, 01:12:10 AM
А мануалы, как ни странно, находятся (барабанная дробь) в мануале! Неожиданно, но это так.
В программе есть встроенная справка.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Мыха on January 07, 2021, 01:17:33 AM
а, кажись понял.

Code: (clickermann) [Select]
LCLICK($_return1, $_return2) - это щелчок мыши по заранее заданной точке(return1, return2). Это, видимо, для автоматизации какой нибудь игры скорее всего. Здесь другой случай. в зависимости от того, загрузилась ли картинка нормально, или нет, дальше начинаются две непересекающиеся ветви программы, которые заканчивают свою работу самостоятельно.  в общем, смысл понятен, спасибо.

З.Ы. встроенную справку нашёл. Спасибо. Барабанную дробь можно выключать.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: melkichelik on January 15, 2021, 08:44:24 PM
Добрый день, вопрос такой.
Как сделать так, что бы эта функция работала на разных компьютерах.
Как я понял на разных компьютерах и разных браузерах одно и то же изображение может выводится в разном виде, особенно это заметно когда запускаешь скрипт на виртуальной машине, там получаются скрины которые и при 70% совпадении не ищутся.
Может можно поставить где-то нужные настройки, в системе или в виртуалке.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: kiril on January 15, 2021, 09:07:59 PM
Добрый день, вопрос такой.
Как сделать так, что бы эта функция работала на разных компьютерах.
Как я понял на разных компьютерах и разных браузерах одно и то же изображение может выводится в разном виде, особенно это заметно когда запускаешь скрипт на виртуальной машине, там получаются скрины которые и при 70% совпадении не ищутся.
Может можно поставить где-то нужные настройки, в системе или в виртуалке.
ну конечно-же можно, устанавливайте программно размер окна; попиксельно идентичный тому, на котором сканировались ваши картинки.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: melkichelik on January 15, 2021, 09:27:44 PM
ну конечно-же можно, устанавливайте программно размер окна; попиксельно идентичный тому, на котором сканировались ваши картинки.
А этот тут при чем? На обеих системах одно и то же разрешение, окно браузере в данном случае раскрывается на весь экран, браузер один и тот же, так, что размер окна тут не при чем, ну и самое главное, в браузере картинки не меняют свой размер (которые мы ищем), в виртуалке же как я понимаю там драйвер по умолчанию возможно этому мешает, я хз как там обстоят дела.
Title: Re: это явно не Для новичков
Post by: kiril on January 18, 2021, 06:33:12 PM
А этот тут при чем? На обеих системах одно и то же разрешение, окно браузере в данном случае раскрывается на весь экран, браузер один и тот же, так, что размер окна тут не при чем, ну и самое главное, в браузере картинки не меняют свой размер (которые мы ищем), в виртуалке же как я понимаю там драйвер по умолчанию возможно этому мешает, я хз как там обстоят дела.
А этот тут при чем?  Вы полностью изменили условия после получения ответа, если многократно проверенное решение лично вас по какой-то причине не устраивает, то не нужно городить костыли, чтоб представить его бесполезным, ищите самостоятельное решение на основе своих предположений и понимания.
Для статистики замечу, что у меня проблем с переносом картинок с основной на виртуальную операционную систему, и на чужие компы, давно уже не возникает, вплоть до генерации самим скриптом, любых нужных ему  для работы картинок, в процессе работы на другом компьютере .
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Алексей87 on February 18, 2021, 12:59:57 AM
Всем привет.
Подскажите пожалуйста, поразбирался с данным функционалом.
На данный момент у меня лучше получается разпознавать необходимые объекты используя
if_pixel_in нежели IF_PICTURE_IN
А теперь вопрос:
в каталоге C:\......\Clickermann\projects\if_picture_in имеется встроенный скрипт проверки main.cms и у меня даже он не отрабатывает. Всегда - картинка не найдена.
1. Естественно окно редактора при этом свернуто;
2. Пробовал менять параметры самого IF_PICTURE_IN;
3. Запускаю ПО от администратора;
4. Привязок к окнам не делал;
Ничего не помогло, кто-то может дать пояснения.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Алексей87 on February 18, 2021, 08:26:13 AM
.......... Вот этот снимок он и делает с помощью команды GETSCREEN. Если эта команада без координат, то Clickermann помещает в свой графический буфер скриншот ВСЕГО вашего экрана.................

Не подтверждаю. На моем устройстве (ноутбук Dell) данная команда помещает в свой графический буфер скриншот НЕ всего экрана, а примерно 2\3 начиная с нулевых координат.
Можете пояснить данную ситуацию и дать рекомендации?
Очень странное поведение. На ноутбуке Win 10 Pro захватывается 2\3 как писал выше.
На виртуальной машине на базе Win 10 20H2 - все корректно. Захват полный.
Что заметил на ноутбуке: несмотря на разрешение в full hd (1920\1080) координаты же стола при наведении курсором значительно меньше максимальные, примерно в 2 раза. С чем связано - не ясно.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on February 18, 2021, 03:13:51 PM
Не подтверждаю. На моем устройстве (ноутбук Dell) данная команда помещает в свой графический буфер скриншот НЕ всего экрана, а примерно 2\3 начиная с нулевых координат.
Можете пояснить данную ситуацию и дать рекомендации?
Очень странное поведение. На ноутбуке Win 10 Pro захватывается 2\3 как писал выше.

Примерно 5% (шутка, конечно меньше) всех вопросов на форуме и в группе ВК аналогичных твоему и везде дан ответ:
Масштаб рабочего стола должен быть 100%!

Вот прям в этом же разделе форума в шапке приклеена тема
Разрешение экрана. Смещение. Видит не весь экран. (http://crapware.aidf.org/forum/index.php?topic=3629.0)
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Алексей87 on February 18, 2021, 04:10:55 PM
Не успел ознакомиться со всеми ветками! Прошу прощения, два дня работаю с ПО.
Теперь все стало ясно.
Такое ощущение что нужно начинать использование ПО с заголовка: возможные ограничения.
И список предостережений что может пойти не так.
Спасибо большое!
Title: Re: IF_PICTURE_IN - Для новичков
Post by: zalmanoff on March 26, 2021, 02:07:16 AM
доброй ночи всем)
смотрю живой форум.
Проблема такая:
Есть область экрана на которой ищется фрагмент, находится...
Проблема в том что таких фрагментов может быть один, а может быть 10 или ни одного.
Если фрагментов нет, все понятно так же как если один.
А вот если их несколько, то находится первый начиная от верхнего левого угла и на этом дальше выход из поиска.
Вопрос как собрать координаты всех фрагментов в заданной области?
Пока только придумалось тупо обрезать область поиска по у и повторить поиск на уменьшенной части и так резать после каждого нахождения до тех пор пока область не станет меньше фрагмента.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on March 26, 2021, 10:10:41 PM
SCANPICTURE
Title: Re: IF_PICTURE_IN - Для новичков
Post by: zalmanoff on March 27, 2021, 11:08:47 PM
SCANPICTURE
СПАСИБО!!!! и простите.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Ivankak on September 11, 2021, 10:02:07 PM
где-то есть полный список всех команд?
Очевидно, что в хелпе не все команды описаны.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: kiril on September 12, 2021, 11:58:11 AM
можете доказать столь очевидное вам утверждение?
 может вы просто невнимательно смотрите в справку, а так-же меню команд и шаблонов?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Ivankak on September 12, 2021, 06:38:13 PM
Видимо, вы правы.
не могу найти
Есть ли в языке механизм, чтобы задавать свои процедуры и функции?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on September 13, 2021, 08:24:08 AM
Свои функции задавать нельзя. Есть только механизм подпрограмм.
Да, не так удобно как с функциями и больше кода и не очень красивого кода может получаться, но использовать можно.
Кликер - использует специально упрощённый язык для новичков, поэтому автор не хотел вводить ещё и области видимости переменных, хоть позже частично это и пришлось сделать в двух случаях.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Aleksey999 on January 12, 2022, 02:14:05 PM
Здравствуйте господа, почитал ответы "гуру" в этой теме и понял что мне нужна помощь.
Скрипт ниже рабочий, действия простые но судя по всему сам скрип не самый оптимальный. Поделитесь опытом, как можно проще и эффективнее использовать функционал кликера?
Заранее благодарю за вашу помощь.

GETSCREEN
COLORMODE(6)
SCREENSHOTFIX(26,597, 367,1090, "herb.bmp")
IF_PIXEL_IN(26,597, 367,1090, 8355647)
   
   KEYDOWN(#ctrl)
   WAITMS(100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   KEYUP(#ctrl)
   WAITMS(200)
   
END_IF

GETSCREEN
COLORMODE(6)
SCREENSHOTFIX(26,597, 367,1090, "herb1.bmp")
IF_PIXEL_IN(26,597, 367,1090, 8355839)
   KEYDOWN(#ctrl)
   WAITMS(100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   KEYUP(#ctrl)
   WAITMS(200)
   
END_IF

GETSCREEN
COLORMODE(6)
SCREENSHOTFIX(26,597, 367,1090, "herb2.bmp")
IF_PIXEL_IN(26,597, 367,1090, 8388607)
   KEYDOWN(#ctrl)
   WAITMS(100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   KEYUP(#ctrl)
   WAITMS(200)
   
END_IF

GETSCREEN
   IF_PIXEL_IN(61,382, 343,413, 269907)
   LCLICK($_return1, $_return2)
   WAITMS(500)
END_IF


HALT


Title: Re: IF_PICTURE_IN - Для новичков
Post by: dramster on January 12, 2022, 09:21:58 PM
Если это весь скрипт, то пусть себе и работает. Единственное что можно оптимизировать, для ускорения работы, это оставить гетскрин и колормод вверху кода, остальные убрать, и добавить области снимка и коррекции.
Code: (clickermann) [Select]
GETSCREEN(26,597,367,1090)
COLORMODE(6, 26,597,367,1090)
SCREENSHOTFIX(26,597, 367,1090, "herb.bmp")
IF_PIXEL_IN(26,597, 367,1090, 8355647)   
   KEYDOWN(#ctrl)
   WAITMS(100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   KEYUP(#ctrl)
   WAITMS(200)   
END_IF

SCREENSHOTFIX(26,597, 367,1090, "herb1.bmp")
IF_PIXEL_IN(26,597, 367,1090, 8355839)
   KEYDOWN(#ctrl)
   WAITMS(100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   KEYUP(#ctrl)
   WAITMS(200) 
END_IF

SCREENSHOTFIX(26,597, 367,1090, "herb2.bmp")
IF_PIXEL_IN(26,597, 367,1090, 8388607)
   KEYDOWN(#ctrl)
   WAITMS(100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   KEYUP(#ctrl)
   WAITMS(200)   
END_IF

GETSCREEN(61,382,343,413)
IF_PIXEL_IN(61,382, 343,413, 269907)
   LCLICK($_return1, $_return2)
   WAITMS(500)
END_IF


HALT

Если хочется сократить код, то можно добавить подпрограммы, справка - язык сценариев - основные конструкции - sub ... end_sub
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Иван_Васильевич on January 12, 2022, 11:51:54 PM
Code: (clickermann) [Select]
// 12.01.2022
#name "New herb"
SUB(herb, $par1, $par2) // подпрограмма с параметрами
   GETSCREEN(26,597,367,1090)
   COLORMODE(6,26,597,367,1090)
   SCREENSHOTFIX(26,597,367,1090,$par1)
   IF_PIXEL_IN(26,597,367,1090,$par2)
      KEYDOWN(#ctrl)
      WAITMS(100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
      KEYUP(#ctrl)
      WAITMS(200)
   END_IF
END_SUB

herb("herb.bmp",8355647) // вызов подпрограммы (обязательно ниже подпрограммы)
herb("herb1.bmp",8355839)
herb("herb2.bmp",8388607)

GETSCREEN(61,382,343,413)
IF_PIXEL_IN(61,382, 343,413, 269907)
   LCLICK($_return1, $_return2)
   WAITMS(500)
END_IF

HALT
GETSCREEN(26,597,367,1090)
   COLORMODE(6,26,597,367,1090)
   SCREENSHOTFIX(26,597,367,1090,$par1)
 о какой оптимальности можно говорить если этот скрипт трижды сканирует одну область и трижды подряд сохраняет её как картинку под разными названиями!
в чём смысл утраивания усилий?
 Было-бы логично  сначала проверять цвет пикселя а уже в зависимости от найденного цвета, обновлять картинку, а так
только команда HALT спасает от перегрузки компа ненужными и ресурсоёмкими действиями. действиями
Code: (clickermann) [Select]
// 12.01.2022
#name "New herb2"
SUB(herb, $par1, $par2) // подпрограмма с параметрами
   IF_PIXEL_IN(26,597,367,1090,$par2)
      SCREENSHOTFIX(26,597,367,1090,$par1)
      KEYDOWN(#ctrl)
      WAITMS(100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
      KEYUP(#ctrl)
      WAITMS(200)
   END_IF
END_SUB
GETSCREEN(26,597,367,1090)
COLORMODE(6,26,597,367,1090)
herb("herb.bmp",8355647) // вызов подпрограммы (обязательно ниже подпрограммы)
herb("herb1.bmp",8355839)
herb("herb2.bmp",8388607)

GETSCREEN(61,382,343,413)
IF_PIXEL_IN(61,382, 343,413, 269907)
   LCLICK($_return1, $_return2)
   WAITMS(500)
END_IF

HALT
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Aleksey999 on January 13, 2022, 06:27:39 PM
Code: (clickermann) [Select]
// 12.01.2022
#name "New herb"
SUB(herb, $par1, $par2) // подпрограмма с параметрами
   GETSCREEN(26,597,367,1090)
   COLORMODE(6,26,597,367,1090)
   SCREENSHOTFIX(26,597,367,1090,$par1)
   IF_PIXEL_IN(26,597,367,1090,$par2)
      KEYDOWN(#ctrl)
      WAITMS(100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
      KEYUP(#ctrl)
      WAITMS(200)
   END_IF
END_SUB

herb("herb.bmp",8355647) // вызов подпрограммы (обязательно ниже подпрограммы)
herb("herb1.bmp",8355839)
herb("herb2.bmp",8388607)

GETSCREEN(61,382,343,413)
IF_PIXEL_IN(61,382, 343,413, 269907)
   LCLICK($_return1, $_return2)
   WAITMS(500)
END_IF

HALT
GETSCREEN(26,597,367,1090)
   COLORMODE(6,26,597,367,1090)
   SCREENSHOTFIX(26,597,367,1090,$par1)
 о какой оптимальности можно говорить если этот скрипт трижды сканирует одну область и трижды подряд сохраняет её как картинку под разными названиями!
в чём смысл утраивания усилий?
 Было-бы логично  сначала проверять цвет пикселя а уже в зависимости от найденного цвета, обновлять картинку, а так
только команда HALT спасает от перегрузки компа ненужными и ресурсоёмкими действиями. действиями
Code: (clickermann) [Select]
// 12.01.2022
#name "New herb2"
SUB(herb, $par1, $par2) // подпрограмма с параметрами
   IF_PIXEL_IN(26,597,367,1090,$par2)
      SCREENSHOTFIX(26,597,367,1090,$par1)
      KEYDOWN(#ctrl)
      WAITMS(100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
      KEYUP(#ctrl)
      WAITMS(200)
   END_IF
END_SUB
GETSCREEN(26,597,367,1090)
COLORMODE(6,26,597,367,1090)
herb("herb.bmp",8355647) // вызов подпрограммы (обязательно ниже подпрограммы)
herb("herb1.bmp",8355839)
herb("herb2.bmp",8388607)

GETSCREEN(61,382,343,413)
IF_PIXEL_IN(61,382, 343,413, 269907)
   LCLICK($_return1, $_return2)
   WAITMS(500)
END_IF

HALT

dramster, спасибо за ответ. Учту ваше замечание на будущее.

Иван_Васильевич, Огромная благодарность за рабочий скрипт с "программой с параметрами". Благодаря этому примеру получил понимание как работает эта программа с параметрами.
В итоге получил вот такой вариант, при котором делается один скриншот и по нему кликликер отыскивает 3 контрольных пикселя:


Code: (clickermann) [Select]

// 12.01.2022
#name "New herb2"
SUB(herb, $par1)   
   IF_PIXEL_IN(2,807,345,1304,$par1)
      KEYDOWN(#ctrl)
      WAITMS(100)
      LCLICK($_return1, $_return2)
      WAITMS(100)
      KEYUP(#ctrl)
      WAITMS(200)
   END_IF
END_SUB

GETSCREEN(2,807,345,1304)
COLORMODE(6,2,807,345,1304)
SCREENSHOTFIX(2,807,345,1304,"herb.bmp")

herb(8355647)
herb(4194175)
herb(8388607)

GETSCREEN(61,382,343,413)
IF_PIXEL_IN(61,382, 343,413, 269907)
   LCLICK($_return1, $_return2)
   WAITMS(100)
END_IF

HALT



Спасибо большое за помощь.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: dramster on January 13, 2022, 10:32:29 PM
Есть предположение, что из трех твоих вызовов подпрограмм находит только один цвет. Если это так, то нужно знать, что IF_PIXEL_IN может искать сразу множество цветов одновременно, и завершит поиск при первом совпадении в области:
Code: (clickermann) [Select]
GETSCREEN(2,807,345,1304)
COLORMODE(6,2,807,345,1304)
SCREENSHOTFIX(2,807,345,1304,"herb.bmp")

IF_PIXEL_IN(2,807,345,1304, 8355647, 4194175, 8388607)  //ищем сразу 3 цвета
   KEYDOWN(#ctrl)
   WAITMS(100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   KEYUP(#ctrl)
   WAITMS(200)
END_IF

GETSCREEN(61,382,343,413)
IF_PIXEL_IN(61,382, 343,413, 269907)
   LCLICK($_return1, $_return2)
   WAITMS(100)
END_IF

HALT
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Aleksey999 on January 13, 2022, 11:41:29 PM
Есть предположение, что из трех твоих вызовов подпрограмм находит только один цвет. Если это так, то нужно знать, что IF_PIXEL_IN может искать сразу множество цветов одновременно, и завершит поиск при первом совпадении в области:
Code: (clickermann) [Select]
GETSCREEN(2,807,345,1304)
COLORMODE(6,2,807,345,1304)
SCREENSHOTFIX(2,807,345,1304,"herb.bmp")

IF_PIXEL_IN(2,807,345,1304, 8355647, 4194175, 8388607)  //ищем сразу 3 цвета
   KEYDOWN(#ctrl)
   WAITMS(100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   KEYUP(#ctrl)
   WAITMS(200)
END_IF

GETSCREEN(61,382,343,413)
IF_PIXEL_IN(61,382, 343,413, 269907)
   LCLICK($_return1, $_return2)
   WAITMS(100)
END_IF

HALT

Задача найти в области каждый из указанных цветов и применить к каждому из них действие.
Варианты выше с этим справляются на ура.

А конкретно этот вариант будет применять действие только к одному из них.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: wert19s on February 10, 2022, 01:45:51 AM
Добрый вечер,

Голову сломал:

GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   BEEP(800,200)
     LOGWRITE ("BOMBA")
      DBLCLICK(493,99)
       WAIT(3)
   DBLCLICK(557,108)
ELSE // "ИНАЧЕ"
   BEEP(800,200)
   BEEP(800,200)
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

этот код не работает, когда не находит картинку то работает и пишет в лог О, а если находит то виснет кликер "не отвечает" закрываю его через диспечер.
и еще когда координаты оставляю :0,0 тоже виснет.
что может быть проблема?
спасибо

ребят помогите ....вернулся опять  к старой проблеме...смотрел видео читал  сообщения здесь но таки не понял...
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Иван_Васильевич on February 10, 2022, 06:30:34 PM
Добрый вечер,

Голову сломал:

GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   BEEP(800,200)
     LOGWRITE ("BOMBA")
      DBLCLICK(493,99)
       WAIT(3)
   DBLCLICK(557,108)
ELSE // "ИНАЧЕ"
   BEEP(800,200)
   BEEP(800,200)
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

этот код не работает, когда не находит картинку то работает и пишет в лог О, а если находит то виснет кликер "не отвечает" закрываю его через диспечер.
и еще когда координаты оставляю :0,0 тоже виснет.
что может быть проблема?
спасибо

ребят помогите ....вернулся опять  к старой проблеме...смотрел видео читал  сообщения здесь но таки не понял...
вы ошибаетесь в  своих наблюдениях или код показали другой
так-как команда HALT даёт коду возможность только одноразового срабатывания и ни о каком зависании даже речи быть не может.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: wert19s on February 10, 2022, 09:46:10 PM
Добрый вечер,

Голову сломал:

GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   BEEP(800,200)
     LOGWRITE ("BOMBA")
      DBLCLICK(493,99)
       WAIT(3)
   DBLCLICK(557,108)
ELSE // "ИНАЧЕ"
   BEEP(800,200)
   BEEP(800,200)
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

этот код не работает, когда не находит картинку то работает и пишет в лог О, а если находит то виснет кликер "не отвечает" закрываю его через диспечер.
и еще когда координаты оставляю :0,0 тоже виснет.
что может быть проблема?
спасибо

ребят помогите ....вернулся опять  к старой проблеме...смотрел видео читал  сообщения здесь но таки не понял...
вы ошибаетесь в  своих наблюдениях или код показали другой
так-как команда HALT даёт коду возможность только одноразового срабатывания и ни о каком зависании даже речи быть не может.
Поверьте виснет при первом нажатии....Я поборол это при первом использовани...недавно опять понадобилось поиск по картинке в том же проэкте...и опять я застрял ....
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Иван_Васильевич on February 11, 2022, 04:53:17 AM
Добрый вечер,

Голову сломал:

GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   BEEP(800,200)
     LOGWRITE ("BOMBA")
      DBLCLICK(493,99)
       WAIT(3)
   DBLCLICK(557,108)
ELSE // "ИНАЧЕ"
   BEEP(800,200)
   BEEP(800,200)
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

этот код не работает, когда не находит картинку то работает и пишет в лог О, а если находит то виснет кликер "не отвечает" закрываю его через диспечер.
и еще когда координаты оставляю :0,0 тоже виснет.
что может быть проблема?
спасибо

ребят помогите ....вернулся опять  к старой проблеме...смотрел видео читал  сообщения здесь но таки не понял...
вы ошибаетесь в  своих наблюдениях или код показали другой
так-как команда HALT даёт коду возможность только одноразового срабатывания и ни о каком зависании даже речи быть не может.
Поверьте виснет при первом нажатии....Я поборол это при первом использовани...недавно опять понадобилось поиск по картинке в том же проэкте...и опять я застрял ....
я проверил, хотя отлично знал, результат который получу, но пусть вам будет стыдно за ваше неуместное  требование проверки, вместо того, чтоб по простому, по человечески спросить о причине ваших собственных неудач.
 вот лог работы!
4:47:35 О
 как видите ни чего у нормальных-то пользователей ни где не виснет, а работает ожидаемо и после проверки скрипт, как и положено выключается, к вашему стыду! :-[
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Иван_Васильевич on February 11, 2022, 05:09:41 AM
Добрый вечер,

Голову сломал:

GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   BEEP(800,200)
     LOGWRITE ("BOMBA")
      DBLCLICK(493,99)
       WAIT(3)
   DBLCLICK(557,108)
ELSE // "ИНАЧЕ"
   BEEP(800,200)
   BEEP(800,200)
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

этот код не работает, когда не находит картинку то работает и пишет в лог О, а если находит то виснет кликер "не отвечает" закрываю его через диспечер.
и еще когда координаты оставляю :0,0 тоже виснет.
что может быть проблема?
спасибо

ребят помогите ....вернулся опять  к старой проблеме...смотрел видео читал  сообщения здесь но таки не понял...
вы ошибаетесь в  своих наблюдениях или код показали другой
так-как команда HALT даёт коду возможность только одноразового срабатывания и ни о каком зависании даже речи быть не может.
Поверьте виснет при первом нажатии....Я поборол это при первом использовани...недавно опять понадобилось поиск по картинке в том же проэкте...и опять я застрял ....
Если вам уже стало стыдно, за своё неадекватное поведение, то:
1. уменьшайте размер картинки для поиска
2. увеличивайте процент совпадения
3. ограничивайте область обновления графического буфера и область цветокоррекции область поиска картинки
4. точнее указывайте область поиска картинки
5. точнее подбирайте для сохранённого образца режим цветокоррекции и игнорирования фона, чтоб повысить процент совпадения.
 
Title: Re: IF_PICTURE_IN - Для новичков
Post by: wert19s on February 12, 2022, 10:49:47 PM
Добрый вечер,

Голову сломал:

GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   BEEP(800,200)
     LOGWRITE ("BOMBA")
      DBLCLICK(493,99)
       WAIT(3)
   DBLCLICK(557,108)
ELSE // "ИНАЧЕ"
   BEEP(800,200)
   BEEP(800,200)
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

этот код не работает, когда не находит картинку то работает и пишет в лог О, а если находит то виснет кликер "не отвечает" закрываю его через диспечер.
и еще когда координаты оставляю :0,0 тоже виснет.
что может быть проблема?
спасибо

ребят помогите ....вернулся опять  к старой проблеме...смотрел видео читал  сообщения здесь но таки не понял...
вы ошибаетесь в  своих наблюдениях или код показали другой
так-как команда HALT даёт коду возможность только одноразового срабатывания и ни о каком зависании даже речи быть не может.
Поверьте виснет при первом нажатии....Я поборол это при первом использовани...недавно опять понадобилось поиск по картинке в том же проэкте...и опять я застрял ....
Добрый вечер
 Если вам уже стало стыдно, за своё неадекватное поведение, то:
1. уменьшайте размер картинки для поиска
например мне нужна область 500х200 и на 1200 на 400 квадрат...я делаю скрин этого участка с цветокорекцией 4-5-6 ....перепробовал все 3///
2. увеличивайте процент совпадения
максимально 100 минимально 0....экспререминтировал от 0 до 100
3. ограничивайте область обновления графического буфера и область цветокоррекции область поиска картинки
сдесь можна подробней?
4. точнее указывайте область поиска картинки
как указывать точнее? указываю ту же область когда беру скрин до вырезания картинки размером 30х30...
5. точнее подбирайте для сохранённого образца режим цветокоррекции и игнорирования фона, чтоб повысить процент совпадения.
цветокорекция ? выставляю так же как когда делаю скрин....а вот насчет фона можна подробнее?
заранее спасибо
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Hito on February 19, 2022, 04:39:10 PM
1. уменьшайте размер картинки для поиска
2. увеличивайте процент совпадения
3. ограничивайте область обновления графического буфера и область цветокоррекции область поиска картинки
4. точнее указывайте область поиска картинки
5. точнее подбирайте для сохранённого образца режим цветокоррекции и игнорирования фона, чтоб повысить процент совпадения.

  На сколько я понимаю, вот это все тут ни при чем. Ведь человек сказал, что если у него НЕ находит картинку, то скрипт не зависает и в лог благополучно прописывается "О". Но для того, чтобы картинку НЕ найти, скрипту нужно поискать ее по всему экрану (в пределах заданных координат) и с заданными параметрами, а значит, что с размером экрана и условиями самого поиска процессор компа все же справляется, если в итоге он все же переходит в раздел ELSE. Ну, это чисто логика и терять ее в нашем деле нельзя...
  Мое мнение - человек что-то путает, так как я не вижу в скрипте проблемных мест. Либо я очень невнимателен - что вполне возможно. В любом случае у меня тоже часто возникают моменты, в которых вроде бы ВСЁ перепроверишь 50 раз, а оно всё равно не работает и тогда меня удивляет одна вещь на форуме - почему так боимся пользоваться логом? Да - ты прописал некие отмашки в лог в обоих направлениях, в которых может идти скрипт, но если сложилась такая ситуация, как у тебя, то не считаешь ли ты, что этих отметок мало и что тебе пора выяснить конкретно - на какой строке у тебя возникает трабл? Я понимаю - скрипт был бы в 3.000 строк... И то можно было бы сделать то же самое в проблемном месте скрипта.

Code: (clickermann) [Select]
GETSCREEN // Clickermann
COLORMODE(3)
IF_PICTURE_IN (20,150, $_xmax,$_ymax, "Y.bmp", -1, 80)
   LOGWRITE ("Картинка найдена в координатах: ",$_return1,",",$_return2)
   BEEP(800,200)
   LOGWRITE ("BOMBA")
   DBLCLICK(493,99)
   LOGWRITE ("Ждемс три сек")
   WAIT(3)
   LOGWRITE ("Двойной клик")
   DBLCLICK(557,108)
   LOGWRITE ("Условие с найденной картинкой закончено")
ELSE // "ИНАЧЕ"
   LOGWRITE ("Картинка не найдена")
   BEEP(800,200)
   LOGWRITE ("BEEP")
   BEEP(800,200)
   LOGWRITE ("BEEP")
   BEEP(800,200)
   LOGWRITE ("О")
END_IF //
HALT

Запускаем скрипт и лог в студию.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Oblie1968 on February 21, 2022, 02:03:27 PM
не считаешь ли ты, что этих отметок мало и что тебе пора выяснить конкретно - на какой строке у тебя возникает трабл? Я понимаю - скрипт был бы в 3.000 строк... И то можно было бы сделать то же самое в проблемном месте скрипта.
Другой вариант, закомментить все строки в проблемном месте и по одной вводить в строй.
Проблема в одном из DBLCLICK, больше просто негде, надо ему смотреть, чего он там кликает.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Benedict on October 09, 2022, 04:31:22 PM
Не понимаю окончательно бесповоротно, что делаю не так?
Есть скрипт:
Code: (clickermann) [Select]
print("Начали скрипт")

SCREENSHOT //делаем контрольный скриншот
GETSCREEN (0,0, $_xmax,$_ymax) //забираем экран в буфер
SCREENSHOTEX (0,0, $_xmax,$_ymax, "scr_from_mem") //делаем контрольный скриншот из буфера
// HALT 
 
IF_PICTURE_IN (3380,1947, 3746,2025, "exit_2.bmp", -1, 90) //проверяем на наличие образца на экране
   print("Нашли кнопку", $_return1, $_return2)
   WAIT(10)
ELSE
   SCREENSHOTEX (3380,1947, 3746,2025, "NOT_FOUND") // делаем контрольный скриншот того места, где искали
   print("Не нашли кнопку")
   WAIT(10)
END_IF

halt


И вот смотрите, что происходит: экран коррекнтый, в памяти всё корректно, контрольный скрин с того места где искали совпадает с шаблонным изображением. А НЕ НАХОДИТ!
Что не так-то?

P.S. Картинки сюда не размещаются, поэтому все примеры тут: https://drive.google.com/drive/folders/1k1mtqkjKowj4IXrOTsCFBq62ZHnaA5Yj?usp=sharing
Title: Re: IF_PICTURE_IN - Для новичков
Post by: kiril on October 09, 2022, 06:00:51 PM
Всё просто; в указанной вами области нет изображения совпадающего с картинкой exit_2 более чем на 90 %
много отличий видит уважаемая программа, странно, что вы их не видите.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Benedict on October 09, 2022, 09:38:44 PM
Честное слово - не понимаю и не вижу разницы между объектами.
При значении в 30% что-то находит, но это что-то не совсем то.
Title: Re: Честное-Благородное!!
Post by: kiril on October 10, 2022, 08:52:04 AM
Честное слово - не понимаю и не вижу разницы между объектами.
При значении в 30% что-то находит, но это что-то не совсем то.
Правильные способы;
цветокоррекции,
сохранения,
вырезания маленького размера,
сравнения с нахождением отличий.
и поиска на экране скриптом,
много-много раз описаны на этом форуме, если тема для, Вас актуальна воспользуйтесь встроенным поисковиком по сообщениям форума.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on October 10, 2022, 10:42:14 AM
И вот смотрите, что происходит: экран коррекнтый, в памяти всё корректно, контрольный скрин с того места где искали совпадает с шаблонным изображением. А НЕ НАХОДИТ!
Что не так-то?
Как уже сказали, картинки слишком разные для поиска в лоб без цветокоррекции и одни проценты здесь не помогут.
Вот "муравьями" показаны одинаковые области
(https://i.ibb.co/xh7YpJb/2022-10-10-10-26-12.png) (https://imgbb.com/)
Их даже не половина. Может процентов 25-30.

P.S. https://youtu.be/7YsBHzR87Yc
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Benedict on October 10, 2022, 01:34:56 PM
у
И вот смотрите, что происходит: экран коррекнтый, в памяти всё корректно, контрольный скрин с того места где искали совпадает с шаблонным изображением. А НЕ НАХОДИТ!
Что не так-то?
Как уже сказали, картинки слишком разные для поиска в лоб без цветокоррекции и одни проценты здесь не помогут.
Вот "муравьями" показаны одинаковые области
(https://i.ibb.co/xh7YpJb/2022-10-10-10-26-12.png) (https://imgbb.com/)
Их даже не половина. Может процентов 25-30.

P.S. https://youtu.be/7YsBHzR87Yc

Спасибо. Понял, осознал.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Loskutok on November 05, 2022, 06:27:54 PM
IF_PICTURE_IN (3380,1947, 3746,2025, "exit_2.bmp", -1,
вопрос такой, а если скрипт куда-то портируется где иное разрешение, или  же область поиска меняет координаты.
как-то можно универсальную "привязку" сделать, какие варианты есть? спасибо
Title: Re: IF_PICTURE_IN - Для новичков
Post by: kiril on November 05, 2022, 09:10:39 PM
Сейчас настолько разные мониторы у людей, что предугадать, как будет у кого выглядеть игра и в каких координатах что появляться практически невозможно.
 Нужно пересохранять и координаты и картинки под каждый новый комп и делать отладку работы скрипта.
как альтернатива скриптом задавать стандартный небольшой  размер игрового окна, помещать его автоматически в координату 0,0 и после этого писать свой скрипт в надежде, что на других компах отображение картинок сильно не поменяется.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Loskutok on November 26, 2022, 09:33:42 PM
подскажите пожалуйста, по теме этой.
Алгоритм
1. 5 окон браузера  развёрнуты в маленьких окошках.
2. после нажатия на кнопку запуска в каждом из окон, через N промежуток времени выскакивает картинка
(N - промежуток разный может и 500мс а может и 3-10 секунд).
3. пытаюсь просто найти её и нажать в каждом из окон.
4. картинка появляется кратковременно на N секунд и пропадает потом
5. если не нашли то перезапуск по новой.

По отдельности, с прописанными координатами для каждого поиска - всё работает ищет нажимает.
Чтобы упросить,чтобы скрипт был короче по коду, и постоянно не переписывать новые координаты -
 оставлен один проход поиска, и задал бОльшее поле поиска картинки для всех 5 окон.
 где ошибка?



Code: [Select]
WAITMS(3000)
LCLICK(100, 300)//клик
LCLICK(100, 400)//клик
LCLICK(100, 500)//клик
LCLICK(100, 600)//клик
LCLICK(100, 700)//клик
$found = 0      
WHILE($found = 0) //цикл ищем  картинку во всех окнах
   GETSCREEN
    COLORMODE(0)
         SCREENSHOTFIX(1,1, 1,1, "1.bmp")
   IF_PICTURE_IN(100,200, 500,1000, "2.bmp", -1, 99) // поиск изображения
           print("Нашли картинку", $_return1, $_return2)   //принт
      move($_return1, $_return2) // навели на неё мышь
      waitms(10)
      LCLICK($_return1, $_return2)//клик
      waitms(500)
   ELSE // ЕСЛИ НЕ НАЙДЕНА
         print("Не нашли кнопку")
         $found = 1  // остановили цикл поиска

      WAITMS(4000)

      END_IF // конец условия
      end_cyc

по идее должен:
 найти кликнуть, потом снова искать в области и кликнуть, цикл же задан. в общем, прокликивать постоянно все картинки  в области.
И только если не находит - поиск картинки выключается, остановил цикл поиска и вернутся к кнопкам запуска. Где ошибка?
область поиска не большая, проверял, если просто искать одну картинку в большой области - всё нормально.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on November 28, 2022, 03:05:56 PM
Как уживается это

2. после нажатия на кнопку запуска в каждом из окон, через N промежуток времени выскакивает картинка
(N - промежуток разный может и 500мс а может и 3-10 секунд).

с этим?
оставлен один проход поиска

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

Зачем вообще прерывать цикл? Тем более при первом же не появлении (а это штатная ситуация из п. 2 и 4).
Пусть крутится по кругу спокойно.

P.S. COLORMODE(0) - бессмысленная команда.
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Loskutok on November 28, 2022, 06:40:08 PM
Как уживается это
с этим?
Спасибо.
Про "один проход"  - имел в виду то, что там была отдельная конструкция кода для каждого окна, нагромождение, что усложняло,везде цифры прописывать постоянно и так далее. но зато поиск был в маленьком поле, а не во всё экране ( это же лучше для нагрузки )
Теперь же  один, но в большом поле.

Quote
Пусть крутится по кругу спокойно.
вот,  как раз для круга добавил  цикл:

Code: [Select]
WAITMS(3000)
LCLICK(100, 300)//клик
LCLICK(100, 400)//клик
LCLICK(100, 500)//клик

   FOR($k=0, $k < 500)

$found = 0      
WHILE($found = 0) //цикл ищем  картинку во всех окнах
   GETSCREEN
    COLORMODE(0)
         SCREENSHOTFIX(1,1, 1,1, "1.bmp")
   IF_PICTURE_IN(100,200, 500,1000, "2.bmp", -1, 99) // поиск изображения
           print("Нашли картинку", $_return1, $_return2)   //принт
      move($_return1, $_return2) // навели на неё мышь
      waitms(10)
      LCLICK($_return1, $_return2)//клик
      waitms(500)

   END_CYC
 
   ELSE // ЕСЛИ НЕ НАЙДЕНА
         print("Не нашли кнопку")
         $found = 1  // остановили цикл поиска

      WAITMS(4000)

      END_IF // конец условия
      end_cyc
вроде правильно?
только я не пойму, почему проход в 500 раз не соответствует действительности по времени.
По логике же, этот цикл поиска картинки, должен будет повториться  500 раз.
Исходя из наших задержек  - это 250000 мс, что должно соответствовать 250 секундам.
И только после этого , ежели не найдена картинка, обождать 4 секунды и перейти в режим трёх кликов.(10мс я намеренно упустил)

По факту - проход  поиска цикла осуществляется по времени раз в 3-5 меньше, вместо 250 секунд может в районе 100 выходит..Почему не соответствует?
Title: Re: Для новичков
Post by: kiril on November 28, 2022, 08:59:27 PM
Code: (clickermann) [Select]
WAITMS(3000)
LCLICK(100, 300)//клик
waitms(150)
LCLICK(100, 400)//клик
waitms(150)
LCLICK(100, 500)//клик
waitms(150)
FOR($k=0, $k < 500)
LOGWRITE ("цикл № ",$k)
   $found = 0
   WHILE($found = 0) //цикл ищем  картинку во всех окнах
      GETSCREEN
      SCREENSHOTFIX(1,1,1,1,"1.bmp") //вы сёрьёзно? скриншотите пиксель?! )))
      IF_PICTURE_IN(100,200, 500,1000, "2.bmp", -1, 99)
         print("Нашли картинку", $_return1, $_return2)   //сообщение в лог программы!
         move($_return1,$_return2) // навели на неё мышь
         waitms(150)
         LCLICK($_return1,$_return2)//клик
         waitms(500)
      ELSE // ЕСЛИ НЕ НАЙДЕНА 2.bmp
         INC($var,1)
         print("Не нашли кнопку ",$var)
         $found = 1  // остановили цикл поиска
         WAIT(4)
      END_IF // конец условия
   END_CYC
END_CYC
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on March 23, 2023, 04:21:39 PM
Часть постов отделена в новую тему
Маджонг. Поиск картинок (http://crapware.aidf.org/forum/index.php?topic=5775.0)
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Loskutok on April 04, 2023, 10:36:21 PM
Code: [Select]
#name "New Script"

$date = "ingo_"$_time_h - $_time_m
$date2 =  "__"
LCLICK(1021,877)          //
WAIT(1)
GETSCREEN(206,709, 582, 1017)
SCREENSHOTEX(206,709, 582, 1017, $date-, 1)
WAIT(65)
LCLICK(1159,106)//
WAIT(5)     
Код делает скрины заданной области и сохраняет в файл с именем дата час и минута и 0001
типа "ingo_22-24-0000" в jpeg.
Но очень много лишних одинаковых картинок выходит.

Подскажите пожалуйста, как-то в такой код можно добавить условие, чтобы скрин новый сохранялся только в том случае, если были изменения в отличие от последнего сделанного?
Title: Re: IF_PICTURE_IN - Для новичков
Post by: Vint on April 05, 2023, 08:41:05 AM
Считай контрольную сумму области
Code: (clickermann) [Select]
$hash= PXLCRC(206,709, 582, 1017)Потом считай повторно и сравнивай.
Но разница будет, даже если изменится цвет всего одного пикселя. Работать будет, если область статична.

P.S.
Code: (clickermann) [Select]
$date = "ingo_"$_time_h - $_time_mЭто что за насилие над интерпретатором?