Тема: AHK: Ортогональное перемещение мыши
Реально ли написать такое, что бы, например, при зажатии shift, мышь двигалась ортогонально, т.е. строго вертикально, или строго горизонтально?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Реально ли написать такое, что бы, например, при зажатии shift, мышь двигалась ортогонально, т.е. строго вертикально, или строго горизонтально?
А в чём проблема? MouseMove с параметром R.
Я наверное не совсем точно выразил мысль. Зажимаем шифт, двигаем мышь по коврику вправо, а на экране курсор двигается вправо строго по прямой линии.
Не знаю как с этим параметром R осуществить такое.
Можно, попозже напишу.
Зачем писать? Есть здесь: 1 Hour Software by Skrommel - DonationCoder.com.
зачем писать? есть сдесь: http://www.donationcoder.com/Software/Skrommel/
Какое из этих приложений использовать для ортогонального перемещения выши?
Вот скрипт, в котором события, генерируемые мышью, пропускаются через мышиный хук. Его функция изменяет движение курсора, если нажата LCtrl — на горизонтальное, если LShift — на вертикальное.
SetBatchLines, -1
SetMouseDelay, -1
CoordMode, Mouse
OnExit, Exit
hHook := DllCall("SetWindowsHookEx"
, Int, WH_MOUSE_LL := 14
, Int, RegisterCallback("LowLevelMouseProc", "Fast")
, UInt, DllCall("GetModuleHandle", UInt, 0)
, UInt, 0)
Return
Exit:
DllCall("UnhookWindowsHookEx", UInt, hHook)
ExitApp
~LCtrl::
MouseGetPos,, y_prev
Direction = horizontal
Return
~LShift::
MouseGetPos, x_prev
Direction = vertical
Return
~LCtrl Up:: Direction =
~LShift Up:: Direction =
LowLevelMouseProc(nCode, wParam, lParam)
{
global Direction, x_prev, y_prev
if (nCode < 0 || !Direction || wParam != 0x200) ; WM_MOUSEMOVE = 0x200
Return DllCall("CallNextHookEx", UInt, 0, Int, nCode, UInt, wParam, UInt, lParam)
if Direction = horizontal
x := NumGet(lParam+0), y := y_prev
if Direction = vertical
y := NumGet(lParam+0, 4), x := x_prev
MouseMove, x, y, 0
Return 1
}
Не исключаю, что этот приём может иногда нарушать корректность работы мыши, так что используй на свой страх и риск.
Крутота! teadrinker, готовься, сейчас запросят диагональные линии, круги, синусоиды и проч.
Легко! Любой каприз за ваши деньги!
Не забываем про Коллекцию .
Для Коллекции, думаю, интереснее будет не конкретно эта тема, а вообще использование хуков в AHK при помощи функции SetWindowsHookEx (которое я, честно говоря, подсмотрел где-то на оф. форуме). Здесь вся фишка в том, что несмотря на
MSDN, Using Hooks:
You must place a global hook procedure in a DLL separate from the application installing the hook procedure.
по-крайней мере функции LowLevelMouseProc и LowLevelKeyboardProc работают, даже будучи размещёнными в теле самого скрипта.
Класс. То, что надо.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться