Что нового

[Мышь, клавиатура] Сдвинуть курсор на 'х, у' относительно текущего положения

Dzot

Новичок
Сообщения
15
Репутация
1
Имеется поле из квадратов (12х8 штук)
Нужно кликнуть по каждому.
Написал код для клика по каждому квадрату. на 5 из 8 столбцов начало тошнить.(писал координаты для каждого из квадратов). Квадраты внешне одинаковые.
Про сдвиг курсора относительно нынешнего положения в справках не нашол.
 

SyDr

Сидра
Сообщения
651
Репутация
158
Код:
Func MouseMovexy(x,y, speed = 10)
Return MouseMove(MouseGetPos(0)+x, MouseGetPos(1)+y, speed)
EndFunc


:
Это был скрытый вопрос: как сложить два числа
 
Автор
D

Dzot

Новичок
Сообщения
15
Репутация
1
Код:
Func MouseMovexy(x,y, speed = 10)
Return MouseMove(MouseGetPos(0)+x, MouseGetPos(1)+y, speed)
EndFunc

Ничо непонял. можно к этому описание?

А ещо бы пример с конкретными числами.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
madmasles, hikki - остроты, имхо, неуместны. флейм потер.
Dzot
ответ был дан.
текущее положение курсора находится функцией MouseGetPos, затем относительно найденных координат делается MouseClick со сдвигом в нужном направлении. код дан. если есть вопросы, спрашиваем относительно непонятного места в коде. вопросы типа я не понял весь скрипт не подойдут, т.к. тогда действительно сначала читать справку по азам, и только потом спрашивать. это не упрек а рекомендация.
Dzot [?]
Написал код для клика по каждому квадрату
если есть код, то желательно его выкладывать. телепатов тут нет (не смотря на подпись SyDr)
 
Автор
D

Dzot

Новичок
Сообщения
15
Репутация
1
Пользуюсь именно той справкой.
И описание которое там дано мне ничего толком не дало. Если бы там все было для меня просто и понятно - я тут не спрашивал бы.
Код:
HotKeySet("^!x", "MyExit")

Func MyExit()
    Exit 
EndFunc 

WinWait ( 'В Контакте | Агрохолдинг (бета) - Opera' )
WinActivate ( 'В Контакте | Агрохолдинг (бета) - Opera' )
WinWaitActive ( 'В Контакте | Агрохолдинг (бета) - Opera' )

MouseClick ( 'left', 1090, 720 )
MouseClick ( 'left', 1090, 720 )
MouseClick ( 'left', 1090, 720 )
MouseClick ( 'left', 1090, 720 )
Sleep ( '1000' )

;1 ряд
MouseClick ( 'left', 430, 545 )
Sleep ( '250' )
MouseClick ( 'left', 460, 530 )
Sleep ( '250' )
MouseClick ( 'left', 490, 515 )
Sleep ( '250' )
MouseClick ( 'left', 520, 495 )
Sleep ( '250' )
MouseClick ( 'left', 555, 480 )
Sleep ( '250' )
MouseClick ( 'left', 585, 460 )
Sleep ( '250' )
MouseClick ( 'left', 620, 445 )
Sleep ( '250' )
MouseClick ( 'left', 650, 430 )
Sleep ( '250' )
MouseClick ( 'left', 680, 410 )
Sleep ( '250' )
MouseClick ( 'left', 710, 395 )
Sleep ( '250' )
MouseClick ( 'left', 740, 380 )
Sleep ( '250' )
MouseClick ( 'left', 775, 365 )
Sleep ( '250' )
 

SyDr

Сидра
Сообщения
651
Репутация
158
Обзор языка - пользовательские функции
Функция - это участок кода, который может быть вызван из любого места скрипта для выполнения некоторой "функции" :smile:. В AutoIt есть два типа функций, это встроенные функции и пользовательские функции.

Пользовательские функции
Пользовательские функции объявляются с помощью ключевого выражения Func...EndFunc.

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

Имя функции должно начинаться с буквы латинского алфавита или знака подчёркивания _, оставшаяся часть имени может быть любой комбинацией букв латинского алфавита, цифр или знаков подчёркивания. Пару примеров правильных имён функций:

MyFunc

Func1

_My_Func1



Ниже пример функции, которая используется для того, чтобы удвоить число:

Код:
$val = 10  
For $i = 1 To 10
     $doubled = MyDouble($val)
     MsgBox(0, "", $val & " - это удвоенное " & $doubled)
     $val = $doubled
Next

Exit


Func MyDouble($value)
     $value = $value * 2
     Return $value
EndFunc
Функция MouseGetPos возвращает координаты текущего положения курсора.
Прибавляем необходимые числа. Получаем координаты нового положения. Передвигаем в него курсор. Готово
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Dzot
Я вот так представил себе решение задачи...

Код:
; НАЧАЛО

; Координата X центра верхнего левого квадрата

 $X=100

; Координата Y центра верхнего левого квадрата

 $Y=100

; Длина стороны квадрата

 $A=50

; Количество квадратов по горизонтали

 $XX=12

; Количество квадратов по вертикали

 $YY=8

 For $I=0 To $YY-1

  For $J=0 To $XX-1

   MouseClick('left',$X+$J*$A,$Y+$I*$A)

  Next

 Next

; КОНЕЦ
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
Re: [Мышь, клавиатура] Сдвинуть курсор на \'х, у\' относительно текущего положения

OffTopic:
Там вся прелесть в том, что квадраты на самом деле под углом в 30-45 градусов + еще "Приблизить-Удалить" реализовано, а так же невидимые области есть во флеш, если не ошибаюсь. Так что бери координаты от коровыбуренки, она как я понял там до удаления приложения будет ;D



Добавлено:
Сообщение автоматически объединено:


Код:
HotKeySet("{ESC}","_Exit")
Func _Exit()
   Exit
EndFunc
 $X=100 ; Координата X центра левого квадрата
 $Y=400 ; Координата Y центра левого квадрата
 $A=30  ; допустим тут половина диагонали квадрата
 $XX=12 ; Количество квадратов слева-направо-снизу-вверх
 $YY=8 ; Количество таких от исходного вправо-вниз
 For $I=0 To $yy-1
 For $J=0 To $xx-1
   ;MouseClick('left',$X+$i*$A+$j*$A,$Y-$j*$A/2+$i*$A/2,10) ; это выполняет
   MouseMove($X+$i*$A+$j*$A,$Y-$j*$A/2+$i*$A/2,10) ; а это демонстрирует просто как именно двигается мышь, только без нажатия 
   $sMouseXY = MouseGetPos() ; это тоже
   ToolTip(" X: "&$sMouseXY[0]&" Y: "&$sMouseXY[1],$sMouseXY[0],$sMouseXY[1]) ; и это
   Sleep(500) ; и это все демонстрация
  Next
 Next

тут наклон сделан ~30 градусов судя по твоему коду :smile:
где у тебя по X идет +30, +35 а по Y -15,-20
 
Автор
D

Dzot

Новичок
Сообщения
15
Репутация
1
Именно то что и нужно было. Спасибо.
Сейчас только найду более точное расстояние смещения :smile:
Тогда ещо к тебе сразу вопрос. Можноли сделать отсчет координат относительно окна флеш плеера в браузере.
MouseCoordMode у меня почему то не работает. Вообще как буд то такой функции нет.
 

Guezt

Продвинутый
Сообщения
335
Репутация
82
Dzot
Про MouseCoordMode не могу сказать, так как тут флеш используется как класс, лучше в разделе у "ботоводов" спросить, а так вот сделал что бы не искать начальные координаты, берешь просто наводишь на начальный квадрат и запускаешь по Ctrl скрипт на выполнение:
Код:
#include <Misc.au3>
HotKeySet("{ESC}","_Exit")

$dll = DllOpen("user32.dll")
WinWaitActive("В Контакте") ; Тут окно приложения контаткта

While 1
    Sleep (500)
    If _IsPressed("11", $dll) Then ; если нажать Ctrl
       _Click() ; то запустится кликание
   EndIf
WEnd

Func _Click()
$sMouseXY = MouseGetPos()
 $X=$sMouseXY[0] ; Координата X центра левого квадрата
 $Y=$sMouseXY[1] ; Координата Y центра левого квадрата
 $A=36  ; допустим тут половина диагонали квадрата
 $XX=12 ; Количество квадратов слева-направо-снизу-вверх
 $YY=8 ; Количество таких от исходного вправо-вниз

 For $I=0 To $yy-1
    For $J=0 To $xx-1
       MouseClick('left',$X+$i*$A+$j*$A+$j+$i,$Y-$j*$A/1.75+$i*$A/1.75,1) ; тут по Х и Y подбери сам угол, сделал приблизительно
    Next
 Next
EndFunc

Func _Exit()
      Exit
EndFunc
:smile:
 
Верх