Author Topic: Плавное движение мыши  (Read 8554 times)

0 Members and 1 Guest are viewing this topic.

Prorok.18

  • Guest
Плавное движение мыши
« on: November 30, 2014, 06:30:15 PM »
Code: [Select]
$speed=1 // Скорость (от 1 до ∞)
$start1=500       // X цели
$start2=500   // Y цели

$x=$_xmouse
$y=$_ymouse

$sign=$start1-$x

$xk=$sign/SQRT($sign*$sign)

FOR ($var, $var<($sign*$xk/$speed))
   $yk=INT(($_xmouse+$xk)*($start2-$y)/($start1-$x)+$y-($start2-$y)*$x/($start1-$x))
   MOVE(INT($_xmouse+$xk*$speed),$yk)
END_CYC

HALT

И пример использования:

Code: [Select]
$speed=1 // Скорость (от 1 до ∞)

SUB(Motion,$start1,$start2)   
   $x=$_xmouse
   $y=$_ymouse   
   $sign=$start1-$x   
   $xk=$sign/SQRT($sign*$sign)   
   FOR ($var, $var<($sign*$xk/$speed))
      $yk=INT(($_xmouse+$xk)*($start2-$y)/($start1-$x)+$y-($start2-$y)*$x/($start1-$x))
      MOVE(INT($_xmouse+$xk*$speed),$yk)
   END_CYC 
END_SUB

$c1=666
$c2=777
Motion($c1,$c2) // Вызываем процедуру с параметрами (стрелка дойдет до координат $c1, $c2)
LCLICK($c1,$c2)

HALT
« Last Edit: November 30, 2014, 07:30:10 PM by Prorok »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Плавное движение мыши
« Reply #1 on: November 30, 2014, 07:48:45 PM »
Там где деление нужно добавить INT а то ошибка если курсор находится в 500,500 но даже и так, если 500,0 то курсор не двигается.

Есть давно уже написанный скрипт, тут хоть и сложнее но работает как часы.
Code: (clickermann) [Select]
// подпрограмма обязательно выше вызова
SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
   $MOVE_SPEED = 3  // множитель скорости
   
   $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_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
   
   IF($MOVE_SPEEDVAR < 1)
      $MOVE_SPEEDVAR = 1
   END_IF
   
   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
   $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, $MOVE_i<INT($MOVE_step))
      $MOVE_X = $MOVE_X + $MOVE_X_step
      $MOVE_Y = $MOVE_Y + $MOVE_Y_step
      MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
      WAITMS(1)
   END_CYC
   
   MOVE($MOVE_END_X, $MOVE_END_Y) //Передвинуть окончательно в заданную точку
END_SUB




// образец строки MOVE
mouse_move(215,224) // двигаем мышь сюда
WAITMS(500)

mouse_move(1205,294)  // туда
WAITMS(500)

mouse_move(1347,1016) // и еще раз
WAITMS(500)

HALT // стоп

Prorok.18

  • Guest
Re: Плавное движение мыши
« Reply #2 on: November 30, 2014, 10:56:22 PM »
Спасибо за код, надеюсь у моего тоже есть право на жизнь)

Новый апгрейд (+ работа над ошибками):

Code: (clickermann) [Select]
SUB(Motion,$start1,$start2,$speed)
   $x=$_xmouse
   $y=$_ymouse
   $sign_X=$start1-$x
   $sign_y=$start2-$y
   IF($sign_x=0)
      $yk=$sign_y/SQRT($sign_y*$sign_y)
      FOR ($var,$var<INT(($sign_y*$yk/$speed)))
         MOVE($_xmouse,$_ymouse+$yk*$speed)
      END_CYC
   ELSE
      $xk=$sign_X/SQRT($sign_X*$sign_X)
      FOR ($var, $var<INT(($sign_x*$xk/$speed)))
         $yk=INT(($_xmouse+$xk)*($start2-$y)/($start1-$x)+$y-($start2-$y)*$x/($start1-$x))
         MOVE($_xmouse+$xk*$speed,$yk)
      END_CYC
   END_IF
   MOVE($start1,$start2) // На всякий пожарный)
END_SUB

Motion(666,540,1) // Координаты и скорость, разве не круто?)
Motion(303,100,3)

HALT
« Last Edit: December 01, 2014, 02:11:47 AM by Prorok »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Плавное движение мыши
« Reply #3 on: December 01, 2014, 12:08:51 PM »
Давай ещё. Пока сыро. Костылёк совсем кривой.
$sign_y ввёл это хорошо, но зависимость пока кривая. Если $sign_X не равен 0 и разница иксов гораздо меньше разницы игреков, то скорость бешенная.
Всё это из-за того, что зависит от одного, а не обоих параметров.
Ставим мышь левее цели, запуск, смотрим скорость.
Ставим выше... и выходим на вторую космическую.


Приколола конструкция
Code: (clickermann) [Select]
$yk=$sign_y/SQRT($sign_y*$sign_y)Это просто для упражнения? Почему не написать просто и понятно
Code: (clickermann) [Select]
IF($sign_X > 0)
  $xk = 1
ELSE
  $xk = -1
END_IF

А то индусский код получается  :)
"Индусский код написан наиболее неочевидным и неестественным из всех возможных способов."
« Last Edit: December 01, 2014, 12:32:35 PM by Vint »


Prorok.18

  • Guest
Re: Плавное движение мыши
« Reply #4 on: December 01, 2014, 07:33:30 PM »
В прошлом скрипте чем выше/ниже над целью, тем выше скорость передвижения.

Вот другой алгоритм на индусском (здесь скорость не меняется), все работает норм:

Code: (clickermann) [Select]
SUB(Motion,$start1,$start2,$speed)
   $x=$_xmouse
   $y=$_ymouse
   $sign_X=$start1-$x
   $sign_y=$start2-$y
   $dist=DIST($x,$y,$start1,$start2)
   IF($sign_x!0)
      FOR($var,$var<$dist+$var,$speed)
         INC($dist,-$speed)
         $xk=INT($start1-$sign_x*$dist/($dist+$var))
         $yk=INT(($xk)*($start2-$y)/($start1-$x)+$y-($start2-$y)*$x/($start1-$x))
         MOVE($xk,$yk)
      END_CYC
   ELSE
      FOR($var,$var<$dist+$var,$speed)
         INC($dist,-$speed)
         $yk=INT($start2-$sign_y*$dist/($dist+$var))
         MOVE($_xmouse,$yk)
      END_CYC
   END_IF 
   MOVE($start1,$start2) // На всякий пожарный 
END_SUB

Motion(500,500,10) // Координаты и скорость
Motion(321,46,1)

HALT


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Плавное движение мыши
« Reply #5 on: December 02, 2014, 11:20:25 AM »
Работает. Но действительно код индусский. Вот, кто прям сходу скажет как работает вот такой цикл? По каким элементам перебирает:
Code: (clickermann) [Select]
FOR($var,$var<$dist+$var,$speed)
   INC($dist,-$speed)
   //...
END_CYC

Это в целях обфускации? Как это настраивать или сопровождать я не знаю.
Почему не сделать понятно и просто:
Code: (clickermann) [Select]
$dist2 = $dist
FOR($var,$var < $dist2,$speed)
   $dist = $dist2-$var-$speed
   //...
END_CYC

Мне одному кажется, что изменение обоих параметров в условии цикла заведёт когда нибудь на кривую дорожку?
« Last Edit: December 02, 2014, 11:22:26 AM by Vint »


Prorok.18

  • Guest
Re: Плавное движение мыши
« Reply #6 on: December 02, 2014, 03:35:06 PM »
Это в целях обфускации? Как это настраивать или сопровождать я не знаю.

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Плавное движение мыши
« Reply #7 on: December 02, 2014, 04:17:40 PM »
Да, конкретно для оптимизации, но на самом деле я просто почему-то не люблю вводить новые переменные
Оптимизация она ведь не только выражается количеством переменных и строк кода. Иногда важнее понятность.
Я переменные не экономлю, хотя и стараюсь не создавать лишних.

В некоторых языках явно запрещено изменять значения переменной цикла в теле этого цикла.
Или бывает нельзя использовать параметр цикла при определении начального и конечного значений.
А иногда и запрета нет, но результат не тот какой хотелось бы. Лучше не привыкать, хотя в кликермэне с этим и свобода-демократия.

Вспомнилось. Тут была одна тема, в коде человек для сокращения скрипта и экономии  одной переменной ... ввёл 3 GOTO, 2 метки, нафиг сломал стройный и нормально читаемый скрипт сделав из него ребус. При этом скрипт стал короче всего на строку или две. Сэкономил короче  :) ;D
« Last Edit: December 02, 2014, 04:21:01 PM by Vint »


PerfectO

  • Зашел в гости
  • *
  • Posts: 6
    • View Profile
Re: Плавное движение мыши
« Reply #8 on: August 10, 2022, 11:19:05 PM »
Использую довольно примитивный скрипт с диапазоном нажатия клевой кнопки мыши в случайную точку области. реально ли в него добавить "плавное движение" мыши со случайной скоростью 1-3, чтобы курсор тупо не прыгал от координаты к координате? в идеале вижу движение внутри очень узкого эллипса по дуге между двумя точками, а не по прямой, если это реально реализовать ;D



Code: [Select]
go:
WAIT(RND(1,5)) // случайная задержка в сек
LCLICK(RND(614,667),RND(504,512)) //Открыть
WAIT(RND(260,275))
LCLICK(RND(118,140),RND(421,443)) //Закрыть
WAIT(RND(11,14))
LCLICK(RND(118,140),RND(421,443)) //Закрыть
WAIT(RND(8,10))
LCLICK(RND(118,140),RND(421,443)) //Закрыть
WAIT(RND(2,5))
goto(go)
« Last Edit: August 10, 2022, 11:36:27 PM by PerfectO »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Плавное движение мыши
« Reply #9 on: August 11, 2022, 08:28:06 AM »
А что, давно используемый скрипт не подходит?
http://crapware.aidf.org/forum/index.php?topic=2112.msg12611#msg12611