Автор Тема: Плавное движение мыши  (Прочитано 6050 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Prorok.18

  • Гость
Плавное движение мыши
« : Ноябрь 30, 2014, 06:30:15 pm »
$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

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

$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
« Последнее редактирование: Ноябрь 30, 2014, 07:30:10 pm от Prorok »

Oraven

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

Есть давно уже написанный скрипт, тут хоть и сложнее но работает как часы.
Код: Clickermann
  1. // подпрограмма обязательно выше вызова
  2. SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
  3.   $MOVE_SPEED = 3  // множитель скорости
  4.  
  5.   $MOVE_Start_X = $_xmouse
  6.   $MOVE_Start_Y = $_ymouse
  7.   $MOVE_X = $MOVE_Start_X
  8.   $MOVE_Y = $MOVE_Start_Y
  9.  
  10.   $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
  11.  
  12.   $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
  13.  
  14.   IF($MOVE_SPEEDVAR < 1)
  15.      $MOVE_SPEEDVAR = 1
  16.   END_IF
  17.  
  18.   $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
  19.   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
  20.   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
  21.  
  22.   FOR($MOVE_i, $MOVE_i<INT($MOVE_step))
  23.      $MOVE_X = $MOVE_X + $MOVE_X_step
  24.      $MOVE_Y = $MOVE_Y + $MOVE_Y_step
  25.      MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
  26.      WAITMS(1)
  27.   END_CYC
  28.  
  29.   MOVE($MOVE_END_X, $MOVE_END_Y) //Передвинуть окончательно в заданную точку
  30. END_SUB
  31.  
  32.  
  33.  
  34.  
  35. // образец строки MOVE
  36. mouse_move(215,224) // двигаем мышь сюда
  37. WAITMS(500)
  38.  
  39. mouse_move(1205,294)  // туда
  40. WAITMS(500)
  41.  
  42. mouse_move(1347,1016) // и еще раз
  43. WAITMS(500)
  44.  
  45. HALT // стоп

Prorok.18

  • Гость
Re: Плавное движение мыши
« Ответ #2 : Ноябрь 30, 2014, 10:56:22 pm »
Спасибо за код, надеюсь у моего тоже есть право на жизнь)

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

Код: Clickermann
  1. SUB(Motion,$start1,$start2,$speed)
  2.   $x=$_xmouse
  3.   $y=$_ymouse
  4.   $sign_X=$start1-$x
  5.   $sign_y=$start2-$y
  6.   IF($sign_x=0)
  7.      $yk=$sign_y/SQRT($sign_y*$sign_y)
  8.      FOR ($var,$var<INT(($sign_y*$yk/$speed)))
  9.         MOVE($_xmouse,$_ymouse+$yk*$speed)
  10.      END_CYC
  11.   ELSE
  12.      $xk=$sign_X/SQRT($sign_X*$sign_X)
  13.      FOR ($var, $var<INT(($sign_x*$xk/$speed)))
  14.         $yk=INT(($_xmouse+$xk)*($start2-$y)/($start1-$x)+$y-($start2-$y)*$x/($start1-$x))
  15.         MOVE($_xmouse+$xk*$speed,$yk)
  16.      END_CYC
  17.   END_IF
  18.   MOVE($start1,$start2) // На всякий пожарный)
  19. END_SUB
  20.  
  21. Motion(666,540,1) // Координаты и скорость, разве не круто?)
  22. Motion(303,100,3)
  23.  
  24. HALT
« Последнее редактирование: Декабрь 01, 2014, 02:11:47 am от Prorok »

Vint

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


Приколола конструкция
Код: Clickermann
  1. $yk=$sign_y/SQRT($sign_y*$sign_y)
Это просто для упражнения? Почему не написать просто и понятно
Код: Clickermann
  1. IF($sign_X > 0)
  2.  $xk = 1
  3. ELSE
  4.  $xk = -1
  5. END_IF

А то индусский код получается  :)
"Индусский код написан наиболее неочевидным и неестественным из всех возможных способов."
« Последнее редактирование: Декабрь 01, 2014, 12:32:35 pm от Vint »


Prorok.18

  • Гость
Re: Плавное движение мыши
« Ответ #4 : Декабрь 01, 2014, 07:33:30 pm »
В прошлом скрипте чем выше/ниже над целью, тем выше скорость передвижения.

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

Код: Clickermann
  1. SUB(Motion,$start1,$start2,$speed)
  2.   $x=$_xmouse
  3.   $y=$_ymouse
  4.   $sign_X=$start1-$x
  5.   $sign_y=$start2-$y
  6.   $dist=DIST($x,$y,$start1,$start2)
  7.   IF($sign_x!0)
  8.      FOR($var,$var<$dist+$var,$speed)
  9.         INC($dist,-$speed)
  10.         $xk=INT($start1-$sign_x*$dist/($dist+$var))
  11.         $yk=INT(($xk)*($start2-$y)/($start1-$x)+$y-($start2-$y)*$x/($start1-$x))
  12.         MOVE($xk,$yk)
  13.      END_CYC
  14.   ELSE
  15.      FOR($var,$var<$dist+$var,$speed)
  16.         INC($dist,-$speed)
  17.         $yk=INT($start2-$sign_y*$dist/($dist+$var))
  18.         MOVE($_xmouse,$yk)
  19.      END_CYC
  20.   END_IF  
  21.   MOVE($start1,$start2) // На всякий пожарный  
  22. END_SUB
  23.  
  24. Motion(500,500,10) // Координаты и скорость
  25. Motion(321,46,1)
  26.  
  27. HALT


Vint

  • Супермодератор
  • Герой форума
  • *
  • Сообщений: 3831
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • Просмотр профиля
Re: Плавное движение мыши
« Ответ #5 : Декабрь 02, 2014, 11:20:25 am »
Работает. Но действительно код индусский. Вот, кто прям сходу скажет как работает вот такой цикл? По каким элементам перебирает:
Код: Clickermann
  1. FOR($var,$var<$dist+$var,$speed)
  2.   INC($dist,-$speed)
  3.   //...
  4. END_CYC

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

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


Prorok.18

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

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

Vint

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

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

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


PerfectO

  • Зашел в гости
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Плавное движение мыши
« Ответ #8 : Август 10, 2022, 11:19:05 pm »
Использую довольно примитивный скрипт с диапазоном нажатия клевой кнопки мыши в случайную точку области. реально ли в него добавить "плавное движение" мыши со случайной скоростью 1-3, чтобы курсор тупо не прыгал от координаты к координате? в идеале вижу движение внутри очень узкого эллипса по дуге между двумя точками, а не по прямой, если это реально реализовать ;D



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)
« Последнее редактирование: Август 10, 2022, 11:36:27 pm от PerfectO »

Vint

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