Автокликер Clickermann :: Форум

Основной раздел => Предложения => Topic started by: vovan13 on October 17, 2012, 01:43:34 AM

Title: Изменение команд движения мыши
Post by: vovan13 on October 17, 2012, 01:43:34 AM
добавить к командам LClick или MOVE не обязательный параметр speed , чтобы при кликах курсор не скакал по точкам, а плавно переходил от одной точки к другой, как живой :)

типа вот этого: MOVE($x,$y,$speed)

В играх ставят проверку на движение мыши, если кликер скачет тупо по точкам, вылазит всякая гадость для проверки игрока. Я конеша написал инклудик для плавной работы, но время выполнения сценария увеличилось.
Title: Re: Изменение команд движения мыши
Post by: Сергей on October 17, 2012, 02:27:19 AM
Конечно увеличилось, ведь для перемещения нужно время! ;D Или ты хочешь какой-нибудь асинхронный метод для этого? Сложно подобное будет автору реализовать.

Кстати, раз уж написал, то поделись инклудом! Все, думаю, тебе спасибо скажут.  ::)
Title: Re: Изменение команд движения мыши
Post by: Oraven on October 17, 2012, 08:18:25 AM
Вот скрипт для плавного перемещения мыши

Code: [Select]
$x2 = 2 // точка перемещения X
$y2 = 2 // точка перемещения Y
$x1 = $_xmouse
$y1 = $_ymouse
$speed = 5

if (($x1 > $x2) & ($y1 > $y2))
   while(($x1 > $x2) | ($y1 > $y2))
      if ($x1 > $x2)
         MOVE($x1-$speed, $y1)
         $x1 = $x1-$speed
      end_if
     
      if ($y1 > $y2)
         MOVE($x1, $y1-$speed)
         $y1 = $y1-$speed
      end_if
   END_CYC
end_if

if (($x1 < $x2) & ($y1 < $y2))
   while(($x1 < $x2) | ($y1 < $y2))
      if ($x1 < $x2)
         MOVE($x1+$speed, $y1)
         $x1 = $x1+$speed
      end_if
     
      if ($y1 < $y2)
         MOVE($x1, $y1+$speed)
         $y1 = $y1+$speed
      end_if
   END_CYC
end_if

if (($x1 < $x2) & ($y1 > $y2))
   while(($x1 < $x2) | ($y1 > $y2))
      if ($x1 < $x2)
         MOVE($x1+$speed, $y1)
         $x1 = $x1+$speed
      end_if
     
      if ($y1 > $y2)
         MOVE($x1, $y1-$speed)
         $y1 = $y1-$speed
      end_if
   END_CYC
end_if

if (($x1 > $x2) & ($y1 < $y2))
   while(($x1 > $x2) | ($y1 < $y2))
      if ($x1 > $x2)
         MOVE($x1-$speed, $y1)
         $x1 = $x1-$speed
      end_if
     
      if ($y1 < $y2)
         MOVE($x1, $y1+$speed)
         $y1 = $y1+$speed
      end_if
   END_CYC
end_if

halt
Title: Re: Изменение команд движения мыши
Post by: vovan13 on October 17, 2012, 02:52:08 PM
У меня немного по другому

Code: [Select]
#name "MOVE"
//начальные точки
$startx=$_xmouse
$starty=$_ymouse
// конечные точки
$finishx= 150
$finishy= 150
// скорость перемещения
$MOVEX=10 // X
$MOVEy=8  // Y

//проверка если курсор возле края экрана
IF($startx>$_xmax-100)
$startx=$_xmax-100
END_IF
IF($starty>$_ymax-50)
$starty=$_ymax-50
END_IF
IF($startx<50)
$startx=50
END_IF
IF($starty<20)
$starty=20
END_IF
// проверяем куда двигать курсор + или -
$cheakx=DIST($startx,$starty,$finishx,$starty)
$cheaky=DIST($startx,$starty,$startx,$finishy)
MOVE($startx+$MOVEX,$starty+$MOVEy)

IF ($cheakx<DIST($_xmouse,$_ymouse,$finishx,$_ymouse))
 $MOVEX=0-$MOVEX
END_IF
IF ($cheaky<DIST($_xmouse,$_ymouse,$_xmouse,$finishy))
 $MOVEY=0-$MOVEY
END_IF

//двигаем курсор
WHILE (($starty!$finishy) &($startx!$finishx))
 
MOVE($startx,$starty)

IF (DIST($_xmouse,$_ymouse,$finishx,$_ymouse)>10)
 $startx=$startx+$MOVEX
ELSE
 $startx=$finishx
END_IF

 IF (DIST($_xmouse,$_ymouse,$_xmouse,$finishy)>10)
 $starty=$starty+$MOVEy
ELSE
 $starty=$finishy
END_IF

END_CYC
Title: Re: Изменение команд движения мыши
Post by: Сергей on October 17, 2012, 10:39:17 PM
Оформили бы это в подпрограмму.

Кстати, подпрограммы можно сувать в инклуды и оттуда их вызывать?
Это ведь можно было бы целые библиотеки запиливать! Хотя, судя по справке, инклуд просто останавливает родительский скрипт, выполняется, и затем включает родительский скрипт обратно.
Если бы вместо этого препроцессор сначала собирал все в один большой файл, то можно было бы библиотеки делать.

И у вас скрипты передвигают курсор со скоростями по осям. При этом относительная скорость между точками будет больше чем скорость перемещения. Это приводит к тому, что если курсор двигается не ровно под 45 градусов, то до одной оси он дойдет быстрее. Конечно это работает, но выглядит не очень круто. Лучше бы сделать чтобы он двигался с одинаковой скоростью по ровно линии.
Смотрите на рисунок, там немного попытался разъяснить к чему я.

Хотя чтобы узнать угол между точками нужна фун-я atan2, а тут её нет. Только базовые sqrt, sin и cos. Надо ждать от автора расширенной поддержки математических функций.

UPD: Подпрограммы из инклудов нормально вызываются, это я туплю.
Title: Re: Изменение команд движения мыши
Post by: Сергей on October 18, 2012, 04:34:57 AM
Написал свой вариант, более быстрый и оптимизированный.
Как использовать:

Code: [Select]
#include "MOVE2.cms"


$MOVE2_END_X = 2 // Конечная координата X
$MOVE2_END_Y = 2 // Конечная координата Y
$MOVE2_SPEED = 2 // За сколько секунд курсор пройдет путь
GOSUB(MOVE2) // Вызываем подпрограмму

waitms(1000) // Не обязательно

$MOVE2_END_X = 1000
$MOVE2_END_Y = 1000
$MOVE2_SPEED = 0.5 // дробные числа работают
GOSUB(MOVE2)

...

Т.е. подключаем инклуд, задаем координаты и скорость через глобальные переменные и вызываем подпрограмму MOVE2. Быстро и просто, код не засоряется лишним мусором. Все переменные в своем именном пространстве, можно не беспокоится что что-то где-то совпадет.

UPD: исправил скобку и лишнее объявление переменных.
Title: Re: Изменение команд движения мыши
Post by: Oraven on October 18, 2012, 09:35:48 AM
Скрипт лучше всех, но вот это лишнее...

#name "MOVE2 include"

$MOVE2_X
$MOVE2_Y
$MOVE2_X_SPEED
$MOVE2_Y_SPEED
$MOVE2_ROUNDED_SPEED


$MOVE2_END_X = $_xmouse // Конечная координата X
$MOVE2_END_Y = $_ymouse// Конечная координата Y
$MOVE2_SPEED = 1 // За сколько секунд курсор пройдет путь
$MOVE2_OPSPERSEC = 850 //Примерно 850 операций в секунду, может различаться на разных компьютерах
$MOVE2_DEBUG = 0 // 1 для вывода сообщений в лог

SUB(MOVE2)
   $MOVE2_X = $_xmouse
   $MOVE2_Y = $_ymouse
   
   $MOVE2_ROUNDED_SPEED = ROUND($MOVE2_SPEED*$MOVE2_OPSPERSEC,0)
   $MOVE2_X_SPEED = ($MOVE2_END_X-$MOVE2_X)/($MOVE2_ROUNDED_SPEED)
   $MOVE2_Y_SPEED = ($MOVE2_END_Y-$MOVE2_Y)/($MOVE2_ROUNDED_SPEED)
   
   IF($MOVE2_DEBUG = 1)
      PRINT("start")
   END_IF
   FOR($i, $i < $MOVE2_ROUNDED_SPEED){
      $MOVE2_X = $MOVE2_X+$MOVE2_X_SPEED
      $MOVE2_Y = $MOVE2_Y+$MOVE2_Y_SPEED
      MOVE(ROUND($MOVE2_X,0), ROUND($MOVE2_Y,0))
   END_CYC
   IF($MOVE2_DEBUG = 1)
      PRINT("done")
   END_IF
   MOVE($MOVE2_END_X, $MOVE2_END_Y)//Передвинуть окончательно в заданную точку
END_SUB
Title: Re: Изменение команд движения мыши
Post by: Сергей on October 18, 2012, 11:00:30 AM
Oraven, да, ты прав, это объявление лишнее. Забыл удалить.
Кстати, интерпретатор на эту скобку не ругнулся. Я её не заметил вообще.  ???
Обновил.
Title: Re: Изменение команд движения мыши
Post by: WEREWOLF on October 18, 2012, 02:13:02 PM
мда по сравнению с вами программерами скриптописцами я полный нуб

я очень редко залезаю в редактор, (обычно если по какой то причине не получается через автозапись записать какоето действие)
Title: Re: Изменение команд движения мыши
Post by: СлавьЯнИнъ on October 25, 2012, 06:19:54 AM
Идея хорошая о "медленном перемещении мыши".
Передвижение по ровной линии можно зделать через отношение сторон площади перемещения.
На досуге опишу.
Title: Re: Изменение команд движения мыши
Post by: ЦИТРИН on October 26, 2012, 09:12:59 PM
Нельзя ли  в новый версиях  добавить  команду  эдакого форсированного SUPERLCLICK?
 Типа  мув +wait+ элдаун +wait+ элап.
 В целом ряде приложений  только этот набор команд и спасает.
Title: Re: Изменение команд движения мыши
Post by: СлавьЯнИнъ on October 26, 2012, 10:18:56 PM
Это в каких например? Для чего это нужно?
Title: Re: Изменение команд движения мыши
Post by: ЦИТРИН on October 26, 2012, 11:02:27 PM
Это в каких например? Для чего это нужно?
Применял в разных приложениях (браузер хром).
Вероятно это нужно для чего-то.
 Обычный клик  часто не приводит к нужным результатам.  Даже  делал нарочитую мультипликацию простых элкликов (до 5-7 нажатий).
Бесполезно.
А вот всякие примочки ( типа подергивания  поля  браузера стрелками вверх-вниз на 1 элклик ну и SUPERLCLICK )вот они основательно помогают от зависаний.
Title: Re: Изменение команд движения мыши
Post by: СлавьЯнИнъ on October 27, 2012, 07:36:40 AM
А вот всякие примочки ( типа подергивания  поля  браузера стрелками вверх-вниз на 1 элклик ну и SUPERLCLICK )вот они основательно помогают от зависаний.
Можно подробней? Я могу этот эффект у себя пронаблюдать?
Title: Re: Изменение команд движения мыши
Post by: Сергей on October 27, 2012, 11:23:20 AM
Нельзя ли  в новый версиях  добавить  команду  эдакого форсированного SUPERLCLICK?
 Типа  мув +wait+ элдаун +wait+ элап.
 В целом ряде приложений  только этот набор команд и спасает.
Внезапно хорошая идея. Хотя были бы пользовательские функции, это можно было бы запилить инклудами.

Это в каких например? Для чего это нужно?
Почти во всех играх, там нажатие не успевает зафиксироваться. Обычно там используются не слушатели устройств ввода, а проверка нажатия на каждой итерации, изза чего нажатие быстрее 1 кадра не учитывается.
Title: Re: Изменение команд движения мыши
Post by: Johnny on October 27, 2012, 11:33:53 AM
господе ты боже мой. ну нет пока пользовательских функций.
можешь сделать просто сабами и переменными. прикинуться что это типа стек.
вводишь в каждую подпрограмму переменные типа $par1, $par2 и перед вызовом gosub просто присваиваешь им значения
Title: Re: Изменение команд движения мыши
Post by: ЦИТРИН on October 27, 2012, 12:03:40 PM
1. Почти во всех играх, там нажатие не успевает зафиксироваться. Обычно там используются не слушатели устройств ввода, 
2. Внезапно хорошая идея. Хотя были бы пользовательские функции, это можно было бы запилить инклудами.
1. По  опыту ,  смею Вас заверить,  что эта примочка встречается сегодня не только в играх.
Думаю, с той стороны идет негласное противодействие кликерам.  Вероятно такое противодействие  некорректно с точки зрения морали стороны держателей сайтов онлайн-игр.
 Если они имеют право  устраивать игрокам геморрой, то  игроки имеют полное моральное  право  пользоваться таблетками от геморроя.
2. Если её можно реализовать,  то в цепочке простой вейт  нужно  бы заменить на рандомный.
 У меня везде как-то так
...
LCLICK(1272,740)
WAITMS(RND(150,250))
...
Опять же ,  судя  по  личному опыту, эта мера  приводит к более высокой работоспособности скрипта в целом.
Title: Re: Изменение команд движения мыши
Post by: Сергей on October 27, 2012, 12:18:20 PM
господе ты боже мой. ну нет пока пользовательских функций.
можешь сделать просто сабами и переменными. прикинуться что это типа стек.
вводишь в каждую подпрограмму переменные типа $par1, $par2 и перед вызовом gosub просто присваиваешь им значения
Это все неудобные костыли, все жаждут полноценных функций :D
Title: Re: Изменение команд движения мыши
Post by: ЦИТРИН on October 27, 2012, 12:25:46 PM
неудобные костыли, все жаждут полноценных функций :D
Может пока то да сё...
Вот, если  Вас не затруднит,  напишите саб , допустим  с названием не   $par1,  а  как- то по человечески $superklik что-ли.
И!
Обязательно на простом примере сопроводите его 100%  рабочим скиптом.
Title: Re: Изменение команд движения мыши
Post by: Сергей on October 27, 2012, 12:41:08 PM
Ну элементарно же:
Code: [Select]
$SLC_X = 0
$SLC_Y = 0
$SLC_W = 60
SUB(SUPERLCLICK)
   MOVE($SLC_X, $SLC_Y)
   WAITMS($SLC_W)
   LDOWN($SLC_X, $SLC_Y)
   WAITMS($SLC_W)
   LUP($SLC_X, $SLC_Y) 
END_SUB


$SLC_X = 639//Координата x
$SLC_Y = 639//Координата y
GOSUB(SUPERLCLICK)//Вызываем подпрограмму

HALT
Title: Re: Изменение команд движения мыши
Post by: ЦИТРИН on October 27, 2012, 01:06:06 PM
Ну элементарно же:
Извините за настойчивость , но получилось ещё более непонятно.
Где брать  этот самый суперклик?
В какое место писать подпрограмму?   Как она должна выглядеть?
И вообще.
 Что такое подпрограмма  на  языке чайника?
Тем меньше будет вопросов у нубов,  чем больше будет  коментов в 100% работающем и цельном  скрипте.
Title: Re: Изменение команд движения мыши
Post by: Oraven on October 27, 2012, 01:26:51 PM
Где брать  этот самый суперклик?
В какое место писать подпрограмму?   Как она должна выглядеть?
И вообще.
 Что такое подпрограмма  на  языке чайника?
Тем меньше будет вопросов у нубов,  чем больше будет  коментов в 100% работающем и цельном  скрипте.

Вот 3 клика с разными параметрами.
Для чего после клика нужно убирать курсор? Для того чтобы он не мешался на экране когда делается GETSCREEN


Code: [Select]
$SLC_X = 100//Координата x
$SLC_Y = 200//Координата y
$SLC_W = 50 // Задержка в 50 мс
GOSUB(SUPERLCLICK)

$SLC_X = 300//Координата x
$SLC_Y = 456//Координата y
$SLC_W = 100 // Задержка в 100 мс
GOSUB(SUPERLCLICK)

$SLC_X = 500//Координата x
$SLC_Y = 600//Координата y
$SLC_W = 300 // Задержка в 300 мс
GOSUB(SUPERLCLICK)



// где то в конце скрипта
SUB(SUPERLCLICK) // Клик
   MOVE($SLC_X, $SLC_Y)
   WAITMS($SLC_W)
   LDOWN($SLC_X, $SLC_Y)
   WAITMS($SLC_W)
   LUP($SLC_X, $SLC_Y) 
   MOVE(1, 1) // Убираем курсор
END_SUB

HALT
Title: Re: Изменение команд движения мыши
Post by: ЦИТРИН on October 27, 2012, 02:06:06 PM
Где брать  этот самый суперклик?
В какое место писать подпрограмму?   Как она должна выглядеть?
И вообще.
 Что такое подпрограмма  на  языке чайника?
Тем меньше будет вопросов у нубов,  чем больше будет  коментов в 100% работающем и цельном  скрипте.

Вот 3 клика с разными параметрами.
 
Хмм.. отличное решение.
Но вопрос так и не снят.
Куда эту выдержку   ставить в реальном 100% работающем скрипте чтобы уйти от простого клика к супер_клику?
Дайте хотя бы одни простенький ( рабочий ) пример  с  простым блокнотиком,  чтоб  нуб мог сделать элементарный  копипаст в 4.7 и  тихо прибалдеть.
 п.с.
И коменты по строкам опять пропущены после
" // где то в конце скрипта
SUB(SUPERLCLICK) "
Пардон , но такие примеры  скорее вгоняют  в ступор, чем  объясняют.
( если речь идет о широкой аудитории, а не о корифеях разумеется )
Title: Re: Изменение команд движения мыши
Post by: СлавьЯнИнъ on October 27, 2012, 02:57:36 PM
Цитрину, нашему  :)
1.
// где то в конце скрипта
SUB(SUPERLCLICK) // Клик
   MOVE($SLC_X, $SLC_Y)
   WAITMS($SLC_W)
   LDOWN($SLC_X, $SLC_Y)
   WAITMS($SLC_W)
   LUP($SLC_X, $SLC_Y) 
   MOVE(1, 1) // Убираем курсор
END_SUB
вот это поставь в самый конец скрипта. и сохранись )
Это "функция" или "команда", к которой ты будешь обращаться так же как и к обычному LCLICK.

2. Теперь пример.
Тебе нужно кликнуть по координатам. Обычно это так:

LCLICK(138,410)

Предположим ты хочешь сделать суперлклик.
Тогда пишешь:

$SLC_X = 138//Координата x
$SLC_Y = 410//Координата y
$SLC_W = 1000 // Задержка в 1000 мс
GOSUB(SUPERLCLICK)

Да! Эти 4 строки тебе надо писать каждый раз когда ты хочешь сделать супер клик вместо обычного!

3. Запусти пример Oraven и внимательно смотри.

Что нибудь прояснилось, Цитрин?
Title: Re: Изменение команд движения мыши
Post by: ЦИТРИН on October 27, 2012, 06:30:33 PM

1. Цитрину, нашему  :)
2.  Да! Эти 4 строки тебе надо писать каждый раз когда ты хочешь сделать супер клик вместо обычного!
1. Я Вас умоляю)
 Только без эмоций.
 Вопросы такого типа задаю не от себя,  а от виртуального и тупого чайника.
 Речь   шла о том, что корифеи пишут прекрасные скрипты, но скупятся на комментарии, полагая что нечто само собой разумеется.
 Вот эти три последних слова  обычно и губят отличные решения.
2.  Ожидание рандомного типа сделать можно?
Например так?
Code: [Select]
SUB(SUPERLCLICK) // Клик
   MOVE($SLC_X, $SLC_Y)
   WAITMS(RND( $SLC_W, $SLC_Z) )
   LDOWN($SLC_X, $SLC_Y)
  WAITMS(RND( $SLC_W, $SLC_Z) )
   LUP($SLC_X, $SLC_Y) 
   MOVE(1, 1) // Убираем курсор
END_SUB

 И вот ещё вопрос возник.
Такой мгновенный  мув в далекую точку  MOVE(1, 1) не вызовет ли вопросы о админов игры?
Может как то приблизить процесс к реальному? 
Title: Re: Изменение команд движения мыши
Post by: СлавьЯнИнъ on October 27, 2012, 07:45:12 PM
1. Пойми меня правильно )) Как я тебя сейчас ))

2. ... о пора ехать )
Title: Re: Изменение команд движения мыши
Post by: Oraven on October 27, 2012, 08:24:55 PM
2.  Ожидание рандомного типа сделать можно?

Вот тебе рандом
Code: [Select]
$SLC_X = 300+RND(-50,50)//Координата x +- 50 пикс
$SLC_Y = 456+RND(-50,50)//Координата y +- 50 пикс
$SLC_W = 100+RND(-50,50) // Задержка от 50 до 150 мс
GOSUB(SUPERLCLICK)

SUB(SUPERLCLICK) // Клик
   MOVE($SLC_X, $SLC_Y)
   WAITMS($SLC_W)
   LDOWN($SLC_X, $SLC_Y)
   WAITMS($SLC_W)
   LUP($SLC_X, $SLC_Y) 
   MOVE(1, 1) // Убираем курсор
END_SUB
Title: Re: Изменение команд движения мыши
Post by: ЦИТРИН on October 27, 2012, 08:51:52 PM
Code: [Select]
[quote author=Oraven link=topic=8.msg316#msg316 date=1351358695]
Вот тебе рандом
[/quote]
1. Мой вариант рандомного времени  для пауз нерабочий , или неизящен?
2. Нужно понимать так , отрывок из рабочего скрипта  , в котором будет  возможен супер_клик  должен выглядеть  , как написали Вы. И размещать его ( этот  отрывок)  нужно в самом конце тех, или иных скриптов юзеров.
А пользователю останется  в  том  месте  , где нужен супер_клик , поставить 4 простых  строки
так , как советовал СлавьЯнИнъ
 $SLC_X = 138    // Координата допустим если   x =138
$SLC_Y = 410      //  Координата допустим если  y = 410
$SLC_W = 1000   // Задержка  допустим в 1000 мс
GOSUB(SUPERLCLICK)
Title: Re: Изменение команд движения мыши
Post by: Oraven on October 27, 2012, 09:21:49 PM
1. Мой вариант рандомного времени  для пауз нерабочий , или неизящен?

В моем случае скрипт имеет гибкие настройки. Рандом нужен не всегда.
Title: Re: Изменение команд движения мыши
Post by: ЦИТРИН on October 28, 2012, 12:03:03 AM
  Рандом нужен не всегда.
Думаю, что на 3 вопроса неопытным пользователям таки нужно дать вразумительный ответ.
1) Когда нужен , или не нужен колормод ( гетскин)? Описать пару характерных случаев.
2) После каких команд в скрипте  задержку  ставить не имеет смысла , а где она очень желательна?
3) В каком случае  задержка рандомного типа имеет смысл?
 Лично мой опыт показывает,  что рандомная задержка мышковых и клавишных  команд ( от 200 до 300 мс) придает скрипту гораздо большую устойчивость  в работе.
 Поправьте меня , если я ошибаюсь.
Title: Re: Изменение команд движения мыши
Post by: СлавьЯнИнъ on October 28, 2012, 05:54:17 PM
Quote
2. ... о пора ехать )
Это о смещении мгновенном.
Code: [Select]
move(($_xmouse-90-rnd(0,90),($_ymouse-90-rnd(0,90))Эта строка будет смещать курсор вверх влево от текущего положения на 90 пикселей, в дополнение к этому смещать ещё вверх влево на случайное значение от 0 до 90.

=========================
1) Когда нужен , или не нужен колормод ( гетскин)? Описать пару характерных случаев.
2) После каких команд в скрипте  задержку  ставить не имеет смысла , а где она очень желательна?
3) В каком случае  задержка рандомного типа имеет смысл?

1.1) Надо сказать, что colormode и getscreen разные вещи.
Говоря о getscreen мы имеем ввиду необходимость анализа текущего изображения на экране.
Например, произошёл переход по ссылке после нажатия или нет.
При отладке и тестовых работах следует в паре с getscreen использовать screenshot. Как показано в справке:
Code: [Select]
getscreen
screenshot
Это позволит оперативно следить за изображением анализируемым сценарием. После отладки, screenshot можно убрать.
1.2) Использование colormode носит специальный характер, и применяется там, где возникают трудности с анализом изображения. Использование его, дополнительно увеличивает нагрузку на процесс сценария. Также во время отладки следует использовать вместе со screenshot.
Code: [Select]
getscreen
colormode (1) // от 1 до 7
screenshot

2) Замечено, что даже при задержке отображения элемента на экране клик в место где он должен быть запоминается и обрабатывается. Однако это шаткая позиция. Задержка, не что иное как ожидание отклика после действия (нажатия, перемещения, запуска и тому подобное). То есть ожидание смены изображения на экране, по простому. В разных условиях время ожидания меняется. Как правило обратно пропорционально вычислительной мощности и скорости передачи данных, мощность и скорость больше значит ожидание меньше.

3) Объективно она не имеет смысла. Задержка должна соответствовать действительному времени обработки данных.
Субъективно, на практике находит применение совмещённая установленная и случайная задержки:
Code: [Select]
waitms (5000+rnd(0,5000))Также в ряде случаев применяется циклическая задержка, которая "сама определяет" необходимое время ожидания.
=========================
Доступные, вразумительные ответы?

Цитрин, мой опыт показывает, что придаёт устойчивость сама задержка между командами ввода, а не её рандомная длительность. Сам пользуюсь диапазонными задержками, потому что нравятся )).
Title: Re: Изменение команд движения мыши
Post by: ЦИТРИН on October 28, 2012, 10:37:51 PM
Использование colormode носит специальный характер, и применяется там, где возникают трудности с анализом изображения.
Спасибо)
 Все доступно. И понятно.
 Однако  стоит заметить, что в справке колормод указан с параметрами  от  0 до 7 .
 Вероятно есть резон указать, что   если  0 ( нет обработки ) то команду колормод не ставим вообще.
 Сейчас там написано, что 0 не имеет смысла.
Это может вводить в заблуждение новичка.
Title: Re: Изменение команд движения мыши
Post by: СлавьЯнИнъ on October 29, 2012, 04:54:58 AM
Помоему в справке нигде не написано "обязательно ставьте команду colormode".
Новичёк её использовать не будет. Просто нет нужды никакой.
И будет прав  :) .
Title: Re: Изменение команд движения мыши
Post by: ЦИТРИН on October 29, 2012, 06:20:24 PM
  colormode".
Новичёк её использовать не будет. Просто нет нужды никакой.
И будет прав  :) .
Хмм.. новичок при непонятках лезет в форумы , а там корифеи смачно обсуждают тонкости колормода.
Понятно,  что ему тоже захочется.
 Психология рядового  юзера , - вот  первый параметр  при создания популярной программы.
Title: Re: Изменение команд движения мыши
Post by: СлавьЯнИнъ on October 29, 2012, 07:55:21 PM
Quote
а там корифеи смачно обсуждают тонкости колормода.
Понятно,  что ему тоже захочется.
Я что-то упустил? Где? Дайте почитать!
Я рядовой пользователь  :)
Title: Re: Изменение команд движения мыши
Post by: ЦИТРИН on October 29, 2012, 07:57:26 PM
Я рядовой пользователь  :)
Рядовой пользователь  это даже не я , а скорее  наш уважаемый прапор.
Title: Re: Изменение команд движения мыши
Post by: Полуночник on October 30, 2012, 04:51:08 AM
Прошу прощения что влезаю... Но я не рядовой пользователь... Я вообще даун в таких тонкостях))) Вынужден признать это. Моя работа(строитель-отделочник) совсем далека от компьютеров...
Title: Re: Изменение команд движения мыши
Post by: СлавьЯнИнъ on November 01, 2012, 03:56:27 PM
Ладно, здесь наговаривать! Мозги везде нужны, в строительстве тем более.
В купе с активным интересом любая отрасль по плечу.
Удачи нам всем )
Title: Re: Изменение команд движения мыши
Post by: Vint on August 14, 2013, 09:26:13 AM
Не так давно вспомнил, что когда-то видел здесь поднималась тема о плавном перемещении мыши.
Естесственно, зачем писать и придумывать велосипед если всё уже придумано. Нашёл, скачал, проверил... и не устроило.
Речь идёт о  MOVE2.cms . Во первых пара увязанных между собой настроек неудобно настраивать, тем более под разные компы (особенно под старый со слабым процем). И главное: скорость перемещения между точками фиксированная, допустим 1 сек. Что через весь экран 1 сек., что подвинуть на 10 пикселов, тоже 1 сек. Настроив под средние/длинные дистанции на "коротких" указатель ползёт как черепаха.
Пришлось написать свой вариант. Для сохранения постоянной скорости привязался к дистанции между стартом и финишем. В качестве параметра скорости выбрал через сколько пикселов "прыгает" мышь при перемещении. Этот вариант более менее приближен к действительности, только нет динамического изменения шага в зависимости от скорости передвижения мыши, но здесь это и не нужно.

Мой вариант (MOVE3):
Code: (clickermann) [Select]
#name "MOVE3"
// Author: VINT
// Version: 1.2 (01.08.2013)

$MOVE_SPEED = 5 // шаг перемещения
$MOVE_END_X = 150 // Конечная координата X
$MOVE_END_Y = 150 // Конечная координата Y
GOSUB(MOVE3)
HALT

SUB(MOVE3)
   $MOVE_Start_X = $_xmouse
   $MOVE_Start_Y = $_ymouse
   $MOVE_X = $MOVE_Start_X
   $MOVE_Y = $MOVE_Start_Y
   
   $MOVE_step=(DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)-1)/$MOVE_SPEED   
   $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
   $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
   
   $MOVE_i=0
   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
Title: Re: Изменение команд движения мыши
Post by: Vint on August 14, 2013, 09:58:43 AM
Решил попробовать с динамическим шагом.
В принципе перемещение похоже на MOVE2 но сделано на принципе MOVE3 - не привязано по времени и скорость меняется в более удобных соотношениях. Так на экране 1280х1024 шаг перемещения в зависимости от дистанции меняется в пределах 1-13 пикселей.
Остановлюсь на этом варианте MOVE4.
Множитель подобран для медленного рабочего компьютера.
Code: (clickermann) [Select]
#name "MOVE4"
// Author: VINT
// Version: 1.2 (01.08.2013)

$MOVE_SPEED = 3 // множитель скорости в попугаях меньше-быстрее. Можно дробный
$MOVE_END_X = 150 // Конечная координата X
$MOVE_END_Y = 150 // Конечная координата Y
GOSUB(MOVE4)
HALT

SUB(MOVE4)
   $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)
   //LOGWRITE ("dist  ",$dist)
   //LOGWRITE ("MOVE_SPEEDVAR  ",$MOVE_SPEEDVAR)
   
   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
   
   $MOVE_i=0
   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
Title: Re: Изменение команд движения мыши
Post by: Oraven on August 14, 2013, 08:13:18 PM
Ну и осталось только доработать чтоб записывать 2а числа в одну переменную

Title: Re: Изменение команд движения мыши
Post by: MIG29 on September 13, 2013, 02:20:19 PM
Интересно.

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

(http://s019.radikal.ru/i629/1309/62/293431024161.jpg)

(http://s003.radikal.ru/i204/1309/c2/faad7eeac758.jpg)
Title: Re: Изменение команд движения мыши
Post by: Vint on September 25, 2013, 08:38:50 PM
А настраивать как будешь? Графики сплайнами рисовать?
И главный вопрос, зачем?
Title: Re: Изменение команд движения мыши
Post by: MIG29 on September 25, 2013, 09:17:56 PM
В этом и заключается мой пост, как сделать, как настроить, как управлять.


Затем чтобы имитировать действия человека)
Title: Re: Изменение команд движения мыши
Post by: BubukaBomb on February 02, 2015, 06:59:22 PM
В версии 4.11 не работает? Не могу запустить скрипты ни из поста Vinta, ни из поста Oravena  :'( Чет мозг не работает у меня...
Title: Re: Изменение команд движения мыши
Post by: Oraven on February 02, 2015, 09:02:06 PM
В версии 4.11 не работает? Не могу запустить скрипты ни из поста Vinta, ни из поста Oravena  :'( Чет мозг не работает у меня...

For в последней версии сам больше не обнуляется, нужно дописать параметр.

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=0, $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 // стоп
Title: Re: Изменение команд движения мыши
Post by: BubukaBomb on February 03, 2015, 09:57:25 AM
Да, так лучше стало))). Все заработало. Спасибо!