1 (изменено: Alexx, 2010-11-30 20:37:36)

Тема: AHK: Иммитация ручного перемещения курсора мыши

Есть скрипт, который при нажатии горячей клавиши перемещает курсор из текущей точки в заданную со случайным смещением. Суть вопроса в следующем:
как реализовать перемещение курсора из начальной позиции в заданную не по прямой линии, а с произвольными смещениями, перечитал много статей и форумов, но так и не нашел нужной информации((
Буду очень благодарен за помощь и идеи по реализации))

w::
Random, Rand, 0,10
Random, Rand1,0,30
MouseClick ,left,800+Rand,600+Rand1, 1, 2

2

Re: AHK: Иммитация ручного перемещения курсора мыши

Так ответ вроде бы очевиден: делайте несколько перемещений вместо одного.

3

Re: AHK: Иммитация ручного перемещения курсора мыши

YMP пишет:

Так ответ вроде бы очевиден: делайте несколько перемещений вместо одного.

Этот вариант рассматривался, и он не подходит. В идеале хотелось бы сделать иммитацию ручного перемещения курсора с соответствующими отклонениями траектории, но вот каким методом этого добиться не знаю...

4

Re: AHK: Иммитация ручного перемещения курсора мыши

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

5 (изменено: Alexx, 2010-10-26 14:11:59)

Re: AHK: Иммитация ручного перемещения курсора мыши

Каким образом посоветуете это реализовать, если координаты начальной позиции курсора всегда разные, а постоянные только конечные?
Хотя начальные координаты и можно взять командой MouseGetPos, но как тогда автоматизировать расчет координат промежуточных точек преломления траектории движения курсора? допустим курсор в данный момент времени имеет координаты x=320 y=900, по горячей клавише курсор отправляется в точку с координатами x=800 y=600, командой MouseClick курсор следует по прямой, как можно задать промежуточные пункты преломлений траектории движения исходя из начальных и конечных координат?
Пока писал, появилась мысль что можно для начала сравнить начальные и конечные координаты x и y, и при условии, если начальная координата x больше той, куда мы отправляем курсор, то начинает работатьпроцедура отнимания от начальной x случайные числа  например от 1 до 4 до тех пор, пока не получим число равное координате куда посылаем курсор.а если начальная координата меньше конечной, то наоборот, прибавляем случайные числа пока не получим конечную координату. Аналогично поступаем с координатой y. В итоге после каждой математической операции мы получаем уникальные координаты в единицу времени. Осталось воплотить всё это в код)

6

Re: AHK: Иммитация ручного перемещения курсора мыши

Ну да, как-то так. Дерзайте.

7

Re: AHK: Иммитация ручного перемещения курсора мыши

уж очень мало опыта у меня в работе с АНК, по вышеописанному методу состряпал вот такой скрипт, но он не работает, курсор вылетает к левому верхнему краю активного окна, посоветуйте, что я делаю не так?
вот код:

q::
MouseGetPos,X,Y 
xc=800
yc=600
Random, Rand, 0,10
if x<xc
{
x2=x+Rand
}

if x>xc
{
x2=x-Rand
}

if y<yc
{
y2=y+Rand
}

if y>yc
{
y2=x-Rand
}

MouseMove, x2, y2

Return

8

Re: AHK: Иммитация ручного перемещения курсора мыши

Ну, ошибка на поверхности. Нужно так:

x2 := x + Rand

И дальше аналогично.

9

Re: AHK: Иммитация ручного перемещения курсора мыши

Тут где-то на форуме видел GUI с падающим мячом. Там траектория является затухающим колебанием.
Думаю, что бы решить поставленную задачу, необходимо сначала математически описать объект (в данном случае траекторию движения), а затем уже пытаться реализовывать это на Ahk.

10 (изменено: jite, 2010-10-27 00:52:32)

Re: AHK: Иммитация ручного перемещения курсора мыши

InFlames пишет:

...необходимо сначала математически описать объект...

Ну раз уж дело дошло до..., может тогда проще записать траектории реальных движений мышью (сами возим, сами пишем), а затем этот массивчик воспроизводить с отклонениями по координатам/времени, по вкусу?

11

Re: AHK: Иммитация ручного перемещения курсора мыши

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

12

Re: AHK: Иммитация ручного перемещения курсора мыши

Данный скрипт передвигает курсор мыши по случайной траектории из текущего положения в заданные координаты со случайным смещением(указываются параметры смещения) по горячей клавише.
Вот весь продукт моих соображений по данному вопросу).
По крайней мере меня он устроил полностью, выкладываю как сделал).
Думаю стоит отметить то, что данный код отправляет курсор мыши в назначенные координаты, но останавливается она со случайным смещением(в коде указано где и как)).

Process, Priority,,High                 ;выделяем максимальны приоритет процессу(может и не нужно, хз)).
SetMouseDelay, 10                     ;устанавливаем время задержки на один шаг мыши. число ставится от -1 до 100.
                                                ;(тут стоит указать, если ставим число задержки -1, то мышь передвигается в 
                                                ;точку назначения мгновенно, и преломлений случайной траектории нет. Чем больше 
                                                ;данное число, тем больше реализм приломления траектории движения мыши, но тем 
                                                ;самым медленнее её скорость перемещения).
SetDefaultMouseSpeed, 0            ;указываем скорость мыши(менять не нужно, просто замедлит её движение, если это необходимо).
CoordMode, Mouse, Screen

return




q::
Critical                                        ;cпридаем приоритет процессу.
loop                                            ;начинаем луп.
{
xf := 553-5                                     ;координата назначения по х.
yf := 580+34                                    ;координата назначения по y.
xd := xf+5                                      ;граница координаты назначения по х.
yd := yf+15                                     ;граница координаты назначения по y.
MouseGetPos, x, y                               ;берем текущее положение курсора.
if (y>=yf) and (y<=yd) and (x>=xf) and (x<=xd)  ;при выполнении условия, если текущее положение курсора попадает в квадрат с .крайними координатами xf-yf и xd-yd? тогда выполняется действие.
{
random,rsmd, 90, 110                            ;определение случайного времени задержки перед нажатием правой кнопкой мыши от 90 до 110 .миллисекунд
SetMouseDelay, rsmd                             ;включаем случайно выбранное время задержки.
random, r1,1,5                                  ;определяем число случайного отклонения от точки назначения в пикселях от 1 до 5 по оси х.
random, r2,1,1                                  ;определяем число случайного отклонения от точки назначения в пикселях от 1 до 1 по оси y.
MouseMove, xf+r1, yf+r2                         ;остановка мыши в указанной области с учетом случайных отклонений по х и у.
Break                                           ;сброс выполнения процесса.
}
else                                            ;если первое условие не выполняется, то смотрим условие:
if (y<yf)                                       ;если текущее положение мыши меньше положения, куда отправляем курсор, то выполняем:
{
random,rand, -0.1, 7.5                          ;выбор случайного числа от -0.1 до 7.5.
random,rand1, -0.1, 7.5                         ;выбор случайного числа от -0.1 до 7.5.
var := ((yf-y)-rand)                            ;вычисляем длинну отрезка по х между текущим положением курсора и направляемым  
                                                          ;со случайным смещением.
var1 := ((yf-y)-rand1)                          ;снова вычисляем длинну отрезка по х между текущим положением курсора и направляемым с 
                                                           ; другим случайным смещением.
koef :=((xf - x+1) / (yf - y+1))                ;вычисляем коэффициент смещения.
y1 := (yf -var)                                 ;координата назначения курсора по у.
x1 := (xf-(var1 * koef))                        ;координата назначения по х.
MouseMove, x1, y1                               ;двигаем мышь от текущего положения к расчитанному.
}
else                                            ;иначе
{
random,rand, -0.1, 7.5                          ;выбор случайного числа от -0.1 до 7.5.
random,rand1, -0.1, 7.5                         ;выбор случайного числа от -0.1 до 7.5.
var := ((y-yf)-rand)                            ;вычисляем длинну отрезка по х между текущим положением курсора и направляемым со случайным 
                                                          ;смещением.
var1 := ((y-yf)-rand1)                          ;снова вычисляем длинну отрезка по х между текущим положением курсора и направляемым с
                                                          ; другим случайным смещением.
koef :=((x - xf+1) / (y - yf+1))                ;вычисляем коэффициент смещения.
y1 := (yf +var)                                 ;координата назначения курсора по у.
x1 := (xf+(var1 * koef))                        ;координата назначения по х.
MouseMove, x1, y1                               ;двигаем мышь от текущего положения к расчитанному.
}
}
return

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

13

Re: AHK: Иммитация ручного перемещения курсора мыши

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

14

Re: AHK: Иммитация ручного перемещения курсора мыши

Только не совсем понятно, зачем это нужно?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15 (изменено: Alexx, 2010-11-30 20:36:27)

Re: AHK: Иммитация ручного перемещения курсора мыши

teadrinker пишет:

Только не совсем понятно, зачем это нужно?

Ну как вариант, иммитация ручного перемещения курсора мыши, не прокатит?;))
Кстати, и тему можно так назвать...

16

Re: AHK: Иммитация ручного перемещения курсора мыши

А для чего нужна "иммитация ручного перемещения курсора мыши"?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17 (изменено: Alexx, 2010-11-30 20:44:06)

Re: AHK: Иммитация ручного перемещения курсора мыши

Мне понадобилась. Возможно ещё кому то понадобится, или послужит подсказкой для своих разработок. Ну а если вам не интересна данная тематика, это уже зависит от вашего кругозора:)ъ

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

18

Re: AHK: Иммитация ручного перемещения курсора мыши

"Эмуляция человека"

19

Re: AHK: Иммитация ручного перемещения курсора мыши

teadrinker пишет:

А для чего нужна "иммитация ручного перемещения курсора мыши"?

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