Что нового

Выполнение по нажатию клавиши с остановкой

Сообщения
80
Репутация
-1
Нужен кликер для пиратского сервера на сдачу шмота нпц.
Для этого нужно ткнуть лкм в одно место быстро 2 раза , потом в другое место и в третье по одному, и повторять это пока удерживается клавиша.
Написал вроде как работает если нажать 1 раз, все 4 тыка. Если тыкать клавишу тоже всё срабатывает.

Но если зажать клавишу происходит тык только в первое место несколько раз, после отпускания скрипт кликает ровно в 2 раза больше времени чем удерживалась клавиша, но если бы это работало.
Когда идут эти клики он пропускает первое место и тыкает только второе и третье.

Я уже написал вариант медленного пошагового клика и тоже самое, но как раз в замедлении и увидел что первый клик раз через три.

Я так понял что прямо объяснить какую клавишу захватить этой проге невозможно, конкретно HotKeySet ведёт себя непонятно как. Вспоминаю какой функциональный бесик был на спектуме, но тут синтаксис ещё путанее чем в батнике.

Так как сделать чтоб при удержании клавиши функция выполнялась, а при отпускании останавливалась?
У меня китайская игровая клавиатура, она делает десятки если не сотни кликов при удержании клавиши, и скрипт похоже не умеет определять тайминги и не берёт их из системы хватая каждый тык.

Может есть языки попроще умеющие нормально работать с клавиатурой?


Код:
Dim $hshop = 10
Dim $vshop = 56
Dim $timing = 50

WinWaitActive("Rappelz")
;Run("notepad.exe")
;WinWaitActive("Безымянный - Блокнот")


HotKeySet("{DOWN}", "uShopO")



While 1
Sleep(500)
WEnd

Func uShopO()

   #cs
MouseClick("left",23+$hshop,297+$vshop,2,2) ;лкм.гк.вк.выбор.скор - выбор нижнего итема
MouseClick("left",292+$hshop,316+$vshop,1,2) ;лкм.гк.вк.выбор.скор - сдвиг вверх (выбор ниже)
MouseClick("left",556+$hshop,316+$vshop,1,2) ;лкм.гк.вк.выбор.скор - сдвиг вверх выбраных (выбор ниже)
#ce

;Send("This is some text.")



MouseMove(23+$hshop,297+$vshop,1)
MouseDown("left")
Sleep($timing)
MouseUp("left")
Sleep($timing)
MouseDown("left")
Sleep($timing)
MouseUp("left")
Sleep($timing)






MouseMove(292+$hshop,316+$vshop,1)
MouseDown("left")
Sleep($timing)
MouseUp("left")
Sleep($timing)
MouseMove(556+$hshop,316+$vshop,1)
MouseDown("left")
Sleep($timing)
MouseUp("left")
Sleep($timing)



EndFunc



Используйте для AutoIt кода тег [autoit]
autoit.gif

madmasles.
 

Ksaan

Знающий
Сообщения
207
Репутация
15
Код:
Opt("MouseClickDelay", $timing) ;Продолжительность паузы между нажатиями кнопки мыши.
Opt("MouseClickDownDelay", $timing) ;Продолжительность удержания кнопки мыши перед ее освобождением.

MouseClick("left", 292+$hshop,316+$vshop, 2) ;Выполнить нажатие клавиши мыши,  2 = Количество нажатий
_IsPressed() ;Проверяет нажатие клавиш


Код:
#include <Misc.au3>
Global $hshop = 10, $vshop = 56, $timing = 50

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

Opt("MouseClickDelay", $timing) 
Opt("MouseClickDownDelay", $timing) 

WinWaitActive("Rappelz")

While 1
     If _IsPressed("28", $hDLL) Then
		uShopO()
     Else 
		Sleep(10)
     EndIf
     Sleep(10)
WEnd

Func uShopO()

	MouseClick("left", 23+$hshop, 297+$vshop, 2)
	Sleep($timing)

	MouseClick("left", 292+$hshop, 316+$vshop)
	Sleep($timing)

	MouseClick("left", 556+$hshop, 316+$vshop)
	Sleep($timing)

EndFunc

DllClose($hDLL)
 

madmasles

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

Dim $hshop = 10
Dim $vshop = 56
Dim $timing = 50

WinWaitActive("Rappelz")
;Run("notepad.exe")
;WinWaitActive("Безымянный - Блокнот")


HotKeySet("{DOWN}", "uShopO")


While 1
	Sleep(500)
WEnd

Func uShopO()
	HotKeySet("{DOWN}"); отключаем горячую клавишу
	Do
		MouseMove(23 + $hshop, 297 + $vshop, 1)
		MouseDown("left")
		Sleep($timing)
		MouseUp("left")
		Sleep($timing)
		MouseDown("left")
		Sleep($timing)
		MouseUp("left")
		Sleep($timing)
		MouseMove(292 + $hshop, 316 + $vshop, 1)
		MouseDown("left")
		Sleep($timing)
		MouseUp("left")
		Sleep($timing)
		MouseMove(556 + $hshop, 316 + $vshop, 1)
		MouseDown("left")
		Sleep($timing)
		MouseUp("left")
		Sleep($timing)
	Until Not _IsPressed('28')
	HotKeySet("{DOWN}", "uShopO");включаем ее
EndFunc   ;==>uShopO
И я бы использовал MouseClick(), (см. выше, как)
 
Автор
W
Сообщения
80
Репутация
-1
Вариант Ksaan работает крайне медленно, 3сек шаг, хоть и правильно. Установка тайминга в 0 и выкидывание sleep ничего не даёт.
MouseClick скорее мешает. Игра очень быстро реагирует на виртуальную клавиатуру и мышь, но через графический интерфейс вручную таких скоростей не добиться, плавное перемещение не нужно.

madmasles, как раз то что надо.
Как бы ещё сделать чтоб когда окно обратно свёрнуто это не выполнялось в других программах?

Ещё бы научить курсор возвращять, хотя необязательно.
Варианты впихнуть такое не получилось, курсор просто дрыгается вверх.
Как и ожидалось подобные переменные получают значения всегда, а не только при запуске начала сценария, поэтому прикрутить их к переменной чтото не получается.
Код:
Dim $hpos=MouseGetPos(0)
Dim $vpos=MouseGetPos(1)

MouseMove($hpos,$vpos)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
winix [?]
Ещё бы научить курсор возвращять
В MouseMove() есть третий параметр. Установите его в 0 и курсор будет перемещаться мгновенно.
А насчет остальных вопросов:
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Модератор.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
работает крайне медленно, 3сек шаг, хоть и правильно

imho, для бота скорость не имеет значения. Главное - надёжность. Какая разница как быстро работает бот, если он может сбиться и остановиться вообще? Лучше медленный, но устойчивый бот)
 

Ksaan

Знающий
Сообщения
207
Репутация
15
winix сказал(а):
Вариант Ksaan работает крайне медленно, 3сек шаг, хоть и правильно. Установка тайминга в 0 и выкидывание sleep ничего не даёт.
MouseClick скорее мешает. Игра очень быстро реагирует на виртуальную клавиатуру и мышь, но через графический интерфейс вручную таких скоростей не добиться, плавное перемещение не нужно.
Странно это однако если в MouseClick поставить скорость движения тоже 1 как и в MouseMove то по тесту скорости, скрипты примерно равны.
 
Автор
W
Сообщения
80
Репутация
-1
Может както можно сделать переменные вместо {DOWN} и 28 чтоб другие клавиши подписать или это тоже другая тема?
Оказалось так что это иногда внтиз надо для чата, а pgdn работает не на всех клавиатурах, пришлось переделывать вообще на f8.

для бота скорость не имеет значения. Главное - надёжность
это не бот, а экономия времени. Трясущийся палец может сдать 2 за секунду, мышка с двойным кликом чуть быстрее, скрипт может сдать 5
 

Ksaan

Знающий
Сообщения
207
Репутация
15
winix сказал(а):
Может както можно сделать переменные вместо {DOWN} и 28 чтоб другие клавиши подписать или это тоже другая тема?
Оказалось так что это иногда внтиз надо для чата, а pgdn работает не на всех клавиатурах, пришлось переделывать вообще на f8.
Так в чем проблема? Почитай про эти функций и глянь названия для клавиш
 
Верх