Что нового

[Мышь, клавиатура] Привязка клика по координатам к клавише

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Вот так, нажмете на F11, сработает hotkey, запустит функцию down, в которой курсор переместится в позицию 369 321, зажмет левую кнопку мыши, и будет держать зажатой пока нажата F11
Код:
#include <Misc.au3>
HotKeySet('{F11}', 'down')
While 1
	Sleep(200)
WEnd

Func down()
	Local $x = 368, $y = 321
	Local Static $F11 = '7A'
	MouseMove($x, $y)
	MouseDown('left')
	While _IsPressed($F11)
		Sleep(10)
	WEnd
	MouseUp ( "left" )
EndFunc

er1cius [?]
2. Как завязать комбинацию из двух клавиш на клик в определенной позиции курсора?
Посмотрите в справка раздел Send Key list
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
inververs,
ИМХО, так корректнее.
Код:
#include <Misc.au3>

HotKeySet('{F11}', '_Down')
HotKeySet('{Esc}', '_Exit')
While Sleep(200)
WEnd

Func _Down()
	HotKeySet('{F11}')
	Local $iX = 368, $iY = 321, $sF11 = '7A'

	MouseMove($iX, $iY, 0)
	MouseDown('primary')
	While _IsPressed($sF11)
		Sleep(10)
	WEnd
	MouseUp('primary')
	HotKeySet('{F11}', '_Down')
EndFunc   ;==>_Down

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
madmasles [?]
ИМХО, так корректнее.
Да, согласен.
В функции можно прописать
Код:
Local $hotKey = @HotKeyPressed
	HotKeySet($hotKey)
...
HotKeySet($hotKey, 'down')

что бы не указывать клавиши.
 

er1cius

Новичок
Сообщения
2
Репутация
0
Спасибо большое за ответы. Пришлось еще поразбираться, но кое-что получилось уже, и оно работает так, как хотелось - удерживает клик пока нажата необходимая клавиша. Получился неказистый способ привязать wasd к джойстику.
Код:
#include <Misc.au3>
HotKeySet('w', '_Down1')
HotKeySet('s', '_Down2')
HotKeySet('d', '_Down3')
HotKeySet('a', '_Down4')
While Sleep(100)
WEnd
Func _Down1()
    HotKeySet('w')
    Local $iX = 296, $iY = 719, $sw = '57'

    MouseMove($iX, $iY, 0)
    MouseDown('primary')
    While _IsPressed($sw)
        Sleep(10)
    WEnd
    MouseUp('primary')
    HotKeySet('w', '_Down1')
EndFunc
Func _Down2()
    HotKeySet('s')
    Local $iX = 291, $iY = 963, $ss = '53'

    MouseMove($iX, $iY, 0)
    MouseDown('primary')
    While _IsPressed($ss)
        Sleep(10)
    WEnd
    MouseUp('primary')
    HotKeySet('s', '_Down2')
EndFunc
Func _Down3()
    HotKeySet('d')
    Local $iX = 419, $iY = 836, $sd= '44'

    MouseMove($iX, $iY, 0)
    MouseDown('primary')
    While _IsPressed($sd)
        Sleep(10)
    WEnd
    MouseUp('primary')
    HotKeySet('d', '_Down3')
EndFunc
Func _Down4()
    HotKeySet('a')
    Local $iX = 168, $iY = 836, $sa = '41'

    MouseMove($iX, $iY, 0)
    MouseDown('primary')
    While _IsPressed($sa)
        Sleep(10)
    WEnd
    MouseUp('primary')
    HotKeySet('a', '_Down4')
EndFunc


inververs сказал(а):
2. Как завязать комбинацию из двух клавиш на клик в определенной позиции курсора?
Посмотрите в справка раздел Send Key list
Я внимательно просмотрел справку, но так и не нашел примерный ответ на то, как нажатие, например, тех же W+D я могу завязать на ту же функцию клика по координатам с удержанием, что указал выше. Подскажите, пожалуйста, что я пропустил?
Спасибо.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
er1cius [?]
тех же W+D я могу завязать на ту же функцию клика по координатам с удержанием, что указал выше. Подскажите, пожалуйста, что я пропустил?
Такое вроде нельзя сделать стандартным способом. Кажется на форуме есть расширенная _IsPressed в которой можно задавать 2 клавиши. Поищите.


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

http://autoit-script.ru/index.php/topic,1391.0.html
 

Ksaan

Знающий
Сообщения
207
Репутация
15
inververs сказал(а):
er1cius [?]
тех же W+D я могу завязать на ту же функцию клика по координатам с удержанием, что указал выше. Подскажите, пожалуйста, что я пропустил?
Такое вроде нельзя сделать стандартным способом. Кажется на форуме есть расширенная _IsPressed в которой можно задавать 2 клавиши. Поищите.


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

http://autoit-script.ru/index.php/topic,1391.0.html


Думаешь нельзя, а если вот так? ток я без проверки, через телефон, отпишитесь самому любопытно :smile:
Код:
#include <Misc.au3>

Local $hDLL = DllOpen("user32.dll")

While 1
     If _IsPressed("44", $hDLL) And _IsPressed("57", $hDLL) Then ;Key "W" and "D".

		 HotKeySet('w')
		 Local $iX = 296, $iY = 719, $sw = '57'
		 MouseMove($iX, $iY, 0)
		 MouseDown('primary')
			While _IsPressed("44", $hDLL) And _IsPressed("57", $hDLL)
				;ConsoleWrite("_IsPressed - Нажата клавиша " & @CRLF)
				;Sleep(1000)
				MouseMove($iX, $iY, 0)
			WEnd
		 MouseUp('primary')
		 HotKeySet('w', '_Down1')
     EndIf
	  Sleep(250)
WEnd

DllClose($hDLL)
 

Andrey_Semenow

Новичок
Сообщения
1
Репутация
0
Здравствуйте, а вот куда нужно копировать весь алгоритм? В АХК? Просто у меня вылазиет ошибка.
 

Nex1q

Новичок
Сообщения
1
Репутация
0
Здравствуйте, а вот куда нужно копировать весь алгоритм? В АХК? Просто у меня вылазиет ошибка.
Нет, не в ахк. AutoIt-и есть язык программирования. Его можна скачать по ссылке:
 

Obsorber

Новичок
Сообщения
4
Репутация
0
Доброго времени суток! Вопрос, который задавали ранее все еще актуален:

"Подскажите, как заставить курсор после выполнения клика вернуться в исходное положение. Суть в том, что в программе нет хоткея, я назначил клик в нужную координату со скоростью 0, и необходимо так же молниеносно вернуться в исходную координату. Спасибо."

Буду очень благодарен если сможете помочь.
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,445
как заставить курсор после выполнения клика вернуться в исходное положение
Код:
$aPos = MouseGetPos() ; текущие координаты курсора
MouseClick("right", 0, 0) ; клик по новым координатам
MouseMove($aPos[0], $aPos[1]) ; возврат к старым координатам
 

Obsorber

Новичок
Сообщения
4
Репутация
0
Код:
$aPos = MouseGetPos() ; текущие координаты курсора
MouseClick("right", 0, 0) ; клик по новым координатам
MouseMove($aPos[0], $aPos[1]) ; возврат к старым координатам

InnI, огромное спасибо за отклик.

Опишу ситуацию - в игре разработчик не предусмотрел назначения горячей клавиши для определенной кнопки интерфейса. AUTOIT отлично справляется с этим функционалом, но к сожалению не возвращает курсор мыши в "изначальное"/"предыдущее" положение ДО нажатия "горячей клавиши" для исполнения скрипта. На данный момент скрипт выглядит так и с функцией перемещения и нажатия правого клика отлично справляется. Осталось только наладить его возвращение в положение "до":
Код:
HotKeySet("{SPACE}", "_MouseClick1")

While 1
    Sleep(100)
WEnd

Func _MouseClick1()
    MouseClick("Left", 100, 200, 1, 0)
EndFunc

$aPos = MouseGetPos()
MouseClick("right", 0, 0)
MouseMove($aPos[0], $aPos[1])

В таком виде функция возврата курсора не срабатывает, как подправить? Заранее благодарю!
 
Последнее редактирование:

Obsorber

Новичок
Сообщения
4
Репутация
0
Код:
HotKeySet("{SPACE}", "_MouseClick1")

While 1
    Sleep(100)
WEnd

Func _MouseClick1()
    $aPos = MouseGetPos()
    MouseClick("Left", 100, 200, 1, 0)
    MouseMove($aPos[0], $aPos[1], 0)
EndFunc
Огромное спасибо! Идеально :D
Сообщение автоматически объединено:

Уважаемые товарищи, подскажите пожалуйста, есть ли возможность добавить в скрипт еще 1-у "горячую" клавишу с аналогичной функцией перемещения курсора по заранее заданным координатам, клику и возврата к исходной точки до активации скрипта?
HotKeySet("{SPACE}", "_MouseClick1")

While 1
Sleep(100)
WEnd

Func _MouseClick1()
$aPos = MouseGetPos()
MouseClick("Left", 100, 200, 1, 0)
MouseMove($aPos[0], $aPos[1], 0)
EndFunc
 
Последнее редактирование:

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,445
еще 1-у "горячую" клавишу
Да хоть две
Код:
HotKeySet("{SPACE}", "_MouseClick1")
HotKeySet("{F1}"   , "_MouseClick2")
HotKeySet("{F2}"   , "_MouseClick3")

While 1
    Sleep(100)
WEnd

Func _MouseClick1()
    $aPos = MouseGetPos()
    MouseClick("Left", 100, 200, 1, 0)
    MouseMove($aPos[0], $aPos[1], 0)
EndFunc

Func _MouseClick2()
    $aPos = MouseGetPos()
    MouseClick("Left", 200, 300, 1, 0)
    MouseMove($aPos[0], $aPos[1], 0)
EndFunc

Func _MouseClick3()
    $aPos = MouseGetPos()
    MouseClick("Left", 300, 400, 1, 0)
    MouseMove($aPos[0], $aPos[1], 0)
EndFunc
 

Obsorber

Новичок
Сообщения
4
Репутация
0
Да хоть две
Код:
HotKeySet("{SPACE}", "_MouseClick1")
HotKeySet("{F1}"   , "_MouseClick2")
HotKeySet("{F2}"   , "_MouseClick3")

While 1
    Sleep(100)
WEnd

Func _MouseClick1()
    $aPos = MouseGetPos()
    MouseClick("Left", 100, 200, 1, 0)
    MouseMove($aPos[0], $aPos[1], 0)
EndFunc

Func _MouseClick2()
    $aPos = MouseGetPos()
    MouseClick("Left", 200, 300, 1, 0)
    MouseMove($aPos[0], $aPos[1], 0)
EndFunc

Func _MouseClick3()
    $aPos = MouseGetPos()
    MouseClick("Left", 300, 400, 1, 0)
    MouseMove($aPos[0], $aPos[1], 0)
EndFunc
Огромное спасибо!
 
Верх