Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: Zimon on September 20, 2016, 01:12:56 AM
-
Здравствуйте! :)
Подскажите, как написать скрипт с помощью IF_PICTURE_IN.
Нужно что бы находил в определенной области картинку "квадрат.bmp", после того как нашел кликал на "круг_1.bmp" и после на "круг_2.bmp".
И еще было бы не плохо добавить рандомную задержку с плавным передвижением мыши, если возможно.
-
Померяйте может подойдёт :)
//=========== Подпрограмма реалистичного движения мыши ======================
SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
$MOVE_Start_X = $_xmouse
$MOVE_Start_Y = $_ymouse
$MOVE_X = $MOVE_Start_X
$MOVE_Y = $MOVE_Start_Y
$dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
$MOVE_step = ($dist-1)/INT(SQRT($dist))
$MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
$MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
FOR($MOVE_i=0, $MOVE_i < INT($MOVE_step))
$MOVE_X = $MOVE_X + $MOVE_X_step
$MOVE_Y = $MOVE_Y + $MOVE_Y_step
MOVE(INT($MOVE_X) + RND(-2,2), INT($MOVE_Y) + RND(-2,2))
WAITMS(RND(3,9)) // задержка при движении по точкам случайная скорость
END_CYC
END_SUB
SUB(m_move,$M_X,$M_Y)
$MOVE_MID_X = INT(($_xmouse+$M_X)/2)
$MOVE_MID_Y = INT(($_ymouse+$M_Y)/2)
$otx = INT(ABS($_xmouse - $M_X) * 0.12)
$oty = INT(ABS($_ymouse - $M_Y) * 0.12)
mouse_move($MOVE_MID_X+RND(-$otx,$otx), $MOVE_MID_Y+RND(-$oty,$oty))
mouse_move($M_X,$M_Y)
MOVE($M_X,$M_Y)
END_SUB
//===========================================================================
//======================== Ваш скрипт =======================================
$kvadrat=0
WHILE($kvadrat=0) // не выйдет из цыкла пока не найдёт "квадрат.bmp"
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "квадрат.bmp")
$kvadrat=1
ELSE
WAIT(1) // будет проверять один раз в секунду
END_IF
END_CYC
WAITMS(RND(500,1000)) // рандомная задержка 0,5-1 секунды
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "круг_1.bmp")
m_move($_return1, $_return2)
WAITMS(RND(50,60))
LCLICK($_return1, $_return2) // клик по "круг_1.bmp"
ELSE
LOGWRITE ("Не нашёл круг_1.bmp")
LOGSHOW (1, 100,100)
HALT // остановит скрипт если не найдёт "круг_1.bmp"
END_IF
WAITMS(RND(500,1000))
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "круг_2.bmp")
m_move($_return1, $_return2)
WAITMS(RND(50,60))
LCLICK($_return1, $_return2) // клик по "круг_2.bmp"
ELSE
LOGWRITE ("Не нашёл круг_2.bmp")
LOGSHOW (1, 100,100)
HALT // остановит скрипт если не найдёт "круг_2.bmp"
END_IF
WAITMS(500) // ждёт пол секунды и начинает всё с начала
//===========================================================================
-
Померяйте может подойдёт :)
Почему-то сразу кликает на квадрат.
-
Померяйте может подойдёт :)
Почему-то сразу кликает на квадрат.
Если используете режим привязки к окну, то уберите подпрограмму реалистичного движения мыши (удалите строки с 1 по 31), и в теле вашего скрипта вместо m_move напишите MOVE.
Проверьте не одинаковые ли у вас картинки под именами "квадрат.bmp" и "круг_1.bmp".
-
IF_PICTURE_IN возвращает в системные переменные $_return1 и $_return2 координаты левого верхнего пикселя изображения. Возможно у вас в левом верхнем углу картинки "круг_1.bmp" находится квадрат.
Если круги постоянно видны на одном месте и нужно просто кликнуть по очереди когда появится квадрат, то попробуйте проще.//======================== Ваш скрипт =======================================
$kvadrat=0
WHILE($kvadrat=0) // не выйдет из цыкла пока не найдёт "квадрат.bmp"
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "квадрат.bmp")
$kvadrat=1
ELSE
WAIT(1) // будет проверять один раз в секунду
END_IF
END_CYC
WAITMS(RND(500,1000)) // рандомная задержка 0,5-1 секунды
MOVE(x, y) // наведёт курсор (подставте свои координаты первого круга)
WAITMS(RND(50,60))
LCLICK(x, y) // сделает клик (подставте свои координаты первого круга)
WAITMS(RND(500,1000))
MOVE(x, y) // подставить координаты второго круга
WAITMS(RND(50,60))
LCLICK(x, y) // подставить координаты второго круга
WAITMS(500) // ждёт пол секунды и начинает всё с начала
//===========================================================================
-
Все, разобрался... Я удалил в середине END_IF в условии, при редактировании. Вернул обратно и все заработало, Огромное спасибо!!!
-
Еще нужна помощь :)
Как теперь сделать так что бы этот скрипт начал работать как только появится зеленый квадрат в заданной области (если зеленого квадрата нет, то не продолжать дальше скрипт). То есть появился зеленый квадрат, дальше начинает сканировать на наличие синего квадрата, после чего кликает на круг_1 и круг_2.
-
Такой же цикл как и для синего
$kvadrat=0
WHILE($kvadrat=0)
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "зелёный квадрат.bmp")
$kvadrat=1
ELSE
WAIT(1)
END_IF
END_CYC
-
Спасибо!