1

Тема: AHK: Нажатие клавиши движением мыши

Доброго времени суток.
Нужен скрипт, в котором например движение мышкой вправо будет зажимать "стрелочку вправо", и соответствующие стрелочки для всех направлений. Скрипт должен вкл/откл по кнопке F1. Возможно ли в принципе такое сделать?

2

Re: AHK: Нажатие клавиши движением мыши

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

3

Re: AHK: Нажатие клавиши движением мыши

Порылся еще в поиске и нашел примерно то, что нужно.

CoordMode, Mouse, Screen
SetMouseDelay, -1
SetDefaultMouseSpeed, 0
default_X := A_ScreenWidth/2
default_Y := A_ScreenHeight/2

SetTimer, Reset, 50
Pause

Pause::Pause

Reset:
MouseGetPos, X, Y
dX := Abs(X - default_X)
dY := Abs(Y - default_Y)
If (dX > dY)
    {
    If (X < default_X)
    Send, {Left}
    If (X > default_X)
    Send, {Right}
    }
If (dX < dY)
    {
    If (Y < default_Y)
    Send, {Up}
    If (Y > default_Y)
    Send, {Down}
    }
MouseMove, default_X, default_Y
Return
F8::MouseGetPos, default_X, default_Y

Но есть проблема, скрипт многократно нажимает кнопку, вместо зажатия, из-за чего скорость ввода заметно ниже. Ставил 1 в строчке "SetTimer, Reset, 50", ускоряло но недостаточно. Можно еще как нибудь ускорить?
И еще невидимый курсор хорошая мысль, как это сделать?

4 (изменено: v413ry4nk4, 2021-10-21 02:37:43)

Re: AHK: Нажатие клавиши движением мыши

Meze
По поводу многократного нажатия вместо зажатия, возможно стоит попробовать эмуляцию клавиш с указанием состояния (Left down / Left up), а про скрытие курсора нашёл тему, думаю, это то, что нужно. У меня пока что нет возможности проверить самому, чуть позже протестирую и отпишу.

5

Re: AHK: Нажатие клавиши движением мыши

Если вам не важна точность в нажатии клавиш, но важна скорость, можете отправлять несколько нажатий при движении.

+ открыть спойлер
CoordMode, Mouse, Screen
SetMouseDelay, -1
SetDefaultMouseSpeed, 0
default_X := A_ScreenWidth/2
default_Y := A_ScreenHeight/2
speed := 2

SetTimer, Reset, 50
Pause

Pause::Pause

Reset:
MouseGetPos, X, Y
dX := Abs(X - default_X)
dY := Abs(Y - default_Y)
If (dX > dY)
    {
    If (X < default_X)
    Send, {Left %speed%}
    If (X > default_X)
    Send, {Right %speed%}
    }
If (dX < dY)
    {
    If (Y < default_Y)
    Send, {Up %speed%}
    If (Y > default_Y)
    Send, {Down %speed%}
    }
MouseMove, default_X, default_Y
Return
F8::MouseGetPos, default_X, default_Y