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

Основной раздел => Общие вопросы => Topic started by: sovaxa on June 03, 2019, 02:13:09 PM

Title: Две функции выдают ошибку
Post by: sovaxa on June 03, 2019, 02:13:09 PM
GETSCREEN
//0000000000000000000000000000
IF(((PXLCOUNT(1150,230, 1165,250, 3223857) > 0) &
(SCANPICTURE (1170,220, 1200,255, "3.bmp")))
WAITMS(100)
LCLICK(1250,115)
WAITMS(100)
DBLCLICK(1250,115)
WAITMS(100)
DBLCLICK(1250,600)
WAITMS(100)
KEYPRESS(#3)
WAITMS(100)
LCLICK(1355,670)
WAIT(50)
ELSE
END_IF
Title: Re: Две функции выдают ошибку
Post by: Oraven on June 03, 2019, 02:34:18 PM
Завязывай уже лепить свои вопросы в "Использование"!

Зачем ты засунул в условие SCANPICTURE? Эта функция за место себя ничего не возвращает. Она записывает все найденные координаты в указанный массив. Данная функция пишется только отдельной строкой.

Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (1170,220, 1200,255, "3.bmp", -1, 100)
   IF(PXLCOUNT(1150,230, 1165,250, 3223857) > 0)
      WAITMS(100)
      LCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,600)
      WAITMS(100)
      KEYPRESS(#3)
      WAITMS(100)
      LCLICK(1355,670)
      WAIT(50)
   END_IF
END_IF

Title: Re: Две функции выдают ошибку
Post by: sovaxa on June 03, 2019, 02:46:15 PM
IF_PICTURE_IN (1170,220, 1200,255, "3.bmp", -1, 100)


эта функция находит заданную картинку 3.bmp в 1170,220, 1200,255 этом квадрате?
Title: Re: Две функции выдают ошибку
Post by: sovaxa on June 03, 2019, 11:04:08 PM
Code: (clickermann) [Select]
GETSCREEN
//0
IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
      WAITMS(100)
      LCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,600)
      WAITMS(100)
      KEYPRESS(#0)
      WAITMS(100)
      LCLICK(1355,670)
      WAIT(50)
      ELSE
//4
IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
      WAITMS(100)
      LCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,600)
      WAITMS(100)
      KEYPRESS(#4)
      WAITMS(100)
      LCLICK(1355,670)
      WAIT(50)
END_IF
END_IF     
END_IF
END_IF
WAITMS(50)

выполняется только первое условие,

IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)

а если его нет должно выполняться второе.

IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)


не получается.
помогите разобраться
Title: Re: Две функции выдают ошибку
Post by: Oraven on June 04, 2019, 09:11:43 AM
выполняется только первое условие,

Ну разве ты не видишь что если IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100) не найдено то и остальной код не будет выполняться потому как он находится в этом условии функции?!

Чтобы это работало нужно написать "второе условие" для каждой части первых двух условий
Code: (clickermann) [Select]
GETSCREEN
//0
IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
   IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
      WAITMS(100)
      LCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,600)
      WAITMS(100)
      KEYPRESS(#0)
      WAITMS(100)
      LCLICK(1355,670)
      WAIT(50)
   ELSE
      IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
         IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
            WAITMS(100)
            LCLICK(1250,115)
            WAITMS(100)
            DBLCLICK(1250,115)
            WAITMS(100)
            DBLCLICK(1250,600)
            WAITMS(100)
            KEYPRESS(#4)
            WAITMS(100)
            LCLICK(1355,670)
            WAIT(50)
         END_IF
      END_IF
   END_IF
ELSE
   IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
      IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
         WAITMS(100)
         LCLICK(1250,115)
         WAITMS(100)
         DBLCLICK(1250,115)
         WAITMS(100)
         DBLCLICK(1250,600)
         WAITMS(100)
         KEYPRESS(#4)
         WAITMS(100)
         LCLICK(1355,670)
         WAIT(50)
      END_IF
   END_IF
END_IF

Выглядит громоздко и не оптимально для редактирования.

Условие "IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)" одинаково для обоих вариантов. Поэтому пишем так.
Code: (clickermann) [Select]
GETSCREEN
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
   //0
   IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
      WAITMS(100)
      LCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,115)
      WAITMS(100)
      DBLCLICK(1250,600)
      WAITMS(100)
      KEYPRESS(#0)
      WAITMS(100)
      LCLICK(1355,670)
      WAIT(50)
   ELSE
      //4
      IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
         WAITMS(100)
         LCLICK(1250,115)
         WAITMS(100)
         DBLCLICK(1250,115)
         WAITMS(100)
         DBLCLICK(1250,600)
         WAITMS(100)
         KEYPRESS(#4)
         WAITMS(100)
         LCLICK(1355,670)
         WAIT(50)
      END_IF
   END_IF
END_IF
WAITMS(50)
Title: Re: Две функции выдают ошибку
Post by: Oraven on June 04, 2019, 09:14:59 AM
Продолжаем оптимизировать код. Помещаем повторяющийся код в подпрограмму.
Code: (clickermann) [Select]
SUB(prog1, $key)
   WAITMS(100)
   LCLICK(1250,115)
   WAITMS(100)
   DBLCLICK(1250,115)
   WAITMS(100)
   DBLCLICK(1250,600)
   WAITMS(100)
   KEYPRESS($key)
   WAITMS(100)
   LCLICK(1355,670)
   WAIT(50)
END_SUB

GETSCREEN
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
   //0
   IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
      prog1(#0) // вызов подпрограммы
   ELSE
      //4
      IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
         prog1(#4) // вызов подпрограммы
      END_IF
   END_IF
END_IF
WAITMS(50)
Title: Re: Две функции выдают ошибку
Post by: sovaxa on June 04, 2019, 09:21:02 AM
Спасибо. У меня еще один вопрос, количество таких условий ограничено?

//0
   IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
      prog1(#0) // вызов подпрограммы
Title: Re: Две функции выдают ошибку
Post by: Oraven on June 04, 2019, 09:53:59 AM
Спасибо. У меня еще один вопрос, количество таких условий ограничено?

//0
   IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
      prog1(#0) // вызов подпрограммы

Не ограничено.
Title: Re: Две функции выдают ошибку
Post by: sovaxa on June 04, 2019, 10:59:42 AM
prog1(#0) здесь можно указывать как однозначные так и двузначные цифры?
Title: Re: Две функции выдают ошибку
Post by: Oraven on June 04, 2019, 11:26:29 AM
prog1(#0) здесь можно указывать как однозначные так и двузначные цифры?

#0 - это константа кода клавиши, равна 48 что соответствует клавиши 0 (описание на последней странице справки)

Если ты хочешь печатать числа то воспользуйся KEYSTRING
Code: (clickermann) [Select]
SUB(prog1, $key)
   WAITMS(100)
   LCLICK(1250,115)
   WAITMS(100)
   DBLCLICK(1250,115)
   WAITMS(100)
   DBLCLICK(1250,600)
   WAITMS(100)
   KEYSTRING($key)
   WAITMS(100)
   LCLICK(1355,670)
   WAIT(50)
END_SUB

GETSCREEN
IF(PXLCOUNT(1150,130, 1200,160, 6471470) > 0)
   //0
   IF_PICTURE_IN (1150,220, 1200,255, "0.bmp", -1, 100)
      prog1(0) // вызов подпрограммы
   ELSE
      //4
      IF_PICTURE_IN (1150,220, 1200,255, "4.bmp", -1, 100)
         prog1(12345) // вызов подпрограммы (будет напечатано 12345)
      END_IF
   END_IF
END_IF
WAITMS(50)



Title: Re: Две функции выдают ошибку
Post by: sovaxa on June 04, 2019, 02:38:30 PM
Как можно объединить три условия?


IF_PICTURE_IN (1150,20, 1200,30, "0.bmp", -1, 100)
и
IF_PICTURE_IN (1150,40, 1200,50, "5.bmp", -1, 100)
и
IF_PICTURE_IN (1150,120, 1200,125, "9.bmp", -1, 100)

тогда выполнялось действие.
Title: Re: Две функции выдают ошибку
Post by: Oraven on June 04, 2019, 03:11:04 PM
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (1150,20, 1200,30, "0.bmp", -1, 100)
   IF_PICTURE_IN (1150,40, 1200,50, "5.bmp", -1, 100)
      IF_PICTURE_IN (1150,120, 1200,125, "9.bmp", -1, 100)
         // действие
      END_IF
   END_IF
END_IF