Author Topic: Поиск картинки, после чего снова поиск картинки, если нажата клавиша, то далее  (Read 9007 times)

0 Members and 1 Guest are viewing this topic.

SimplY

  • Активный участник
  • ***
  • Posts: 125
    • View Profile
Доброго времени суток!))

Помогите найти проблему и подскажите, почему так происходит?

В общем, кликер ищет картинку. Если картинка найдена, то кликер кликает по ней и затем снова ищет эту же картинку и так до бесконечности. Допукается задержка 1 секунда после клика и перед новым поиском. Если нажата клавиша CTRL, то поиск картинки прекращается и скрипт продолжается.

Написал такой код для этого
Code: (clickermann) [Select]
tel:
      $check = 0
      WHILE($check = 0)
         GETSCREEN(838,578,1706,1023)
         IF_PICTURE_IN (838,578,1706,1023, "телмоб.bmp", -1, 80)
            $check = 1
            WAITMS(50)
            $WNDF = WNDFIND("Связь с телефоном")
            WAITMS(50)
            WNDPOS($WNDF,135,190)
            WAITMS(10)
            WNDSIZE($WNDF,1408,844)
            WAITMS(50)
            LCLICK($_return1+12, $_return2+12)
            WAITMS(300)
            LCLICK(1425,201)  // Закрыть телефон
            WAITMS(300)
            GOTO(tel)
         ELSE
            WAITMS(50)
         END_IF
         IF(ISKEYDOWN(#CTRL)=1)
            $check = 1
            WHILE(ISKEYDOWN(#CTRL)=1)
               WAITMS(50)
            END_CYC
         END_IF
      END_CYC
      // Продолжение скрипта
и вроде бы он работает, но если нажать CTRL c 10 раза. Причем кол-во нажатий для продолжения скрипта рандомное. Может через 2 раза, может через 20 раз. Почему это происходит? Как это убрать? Нужно, чтобы достаточно 1 раза было.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Как минимум сделать правильно - убрать выпрыгивание по GOTO из цикла. Тем более, что оно здесь не нужно совсем.
Для этого удалить строки 18, 6, 1

А по поводу CTRL его нажатие проверяется только в месте выполнения ISKEYDOWN. Соответственно, если картинка найдена, то там пауз минимум на
300+300+50+50+50+10+поиск с % ≈ 1 сек.
9 и 7 строка тоже не нужны тут было пара товарищей любителей пихать после всех условий задержки, а люди потом за ними повторяют. Это вредные паразитные задержки непонятно с какой целью вставленные.

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

Code: (clickermann) [Select]
THREAD(break_key_th, 0)
    IF(ISKEYDOWN(#CTRL) = 1)
        $break_key = 1
        WHILE(ISKEYDOWN(#CTRL) = 1)
            WAITMS(50)
        END_CYC
        SETTHREAD(break_key_th, 2)
    ELSE
        WAITMS(50)
    END_IF
END_THREAD


SETTHREAD(break_key_th, 1)
$break_key = 0
WHILE($break_key= 0)
    GETSCREEN(838,578,1706,1023)
    IF_PICTURE_IN(838,578,1706,1023, "телмоб.bmp", -1, 80)
        $WNDF = WNDFIND("Связь с телефоном")
        WNDPOS($WNDF, 135, 190)
        WAITMS(10)
        WNDSIZE($WNDF, 1408, 844)
        WAITMS(50)
        LCLICK($_return1+12, $_return2+12)
        WAITMS(300)
        LCLICK(1425, 201)  // Закрыть телефон
        WAITMS(300)
    ELSE
        WAITMS(50)
    END_IF   
END_CYC
// Продолжение скрипта

после нажатия выход произойдёт не сразу, долбить не нужно. Просто выйдет из цикла когда закончит всеклики с паузами написанные в цикле - если картинка в тот момент найдена.
« Last Edit: November 21, 2023, 09:48:20 AM by Vint »