1

Тема: AHK: Ортогональное перемещение мыши

Реально ли написать такое, что бы, например, при зажатии shift, мышь двигалась ортогонально, т.е. строго вертикально, или строго горизонтально?

2

Re: AHK: Ортогональное перемещение мыши

А в чём проблема? MouseMove с параметром R.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

3

Re: AHK: Ортогональное перемещение мыши

Я наверное не совсем точно выразил мысль. Зажимаем шифт, двигаем мышь по коврику вправо, а на экране курсор двигается вправо строго по прямой линии.
Не знаю как с этим параметром R осуществить такое.

4

Re: AHK: Ортогональное перемещение мыши

Можно, попозже напишу.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

5 (изменено: alexii, 2010-06-08 12:44:20)

Re: AHK: Ортогональное перемещение мыши

Зачем писать? Есть здесь: 1 Hour Software by Skrommel - DonationCoder.com.

6

Re: AHK: Ортогональное перемещение мыши

evgenyatam пишет:

зачем писать? есть сдесь: http://www.donationcoder.com/Software/Skrommel/

Какое из этих приложений использовать для ортогонального перемещения выши?

7

Re: AHK: Ортогональное перемещение мыши

Вот скрипт, в котором события, генерируемые мышью, пропускаются через мышиный хук. Его функция изменяет движение курсора, если нажата 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
}

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

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

8

Re: AHK: Ортогональное перемещение мыши

Крутота! teadrinker, готовься, сейчас запросят диагональные линии, круги, синусоиды и проч.

9

Re: AHK: Ортогональное перемещение мыши

Легко! Любой каприз за ваши деньги!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

10

Re: AHK: Ортогональное перемещение мыши

Не забываем про Коллекцию .

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

11 (изменено: teadrinker, 2010-06-08 17:09:15)

Re: AHK: Ортогональное перемещение мыши

Для Коллекции, думаю, интереснее будет не конкретно эта тема, а вообще использование хуков в 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 работают, даже будучи размещёнными в теле самого скрипта.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

12

Re: AHK: Ортогональное перемещение мыши

Класс. То, что надо.