1 (изменено: M0ZzZgG, 2015-01-19 18:01:30)

Тема: AHK: Переназначить движение мыши на клавиши

Здравствуйте! Не могли бы вы помочь мне модифицировать хук мыши под такую потребность: чтобы по перемещению мыши в одном из четырёх направлений посылалось нажатие определённой клавиши.

2

Re: AHK: Переназначить движение мыши на клавиши

M0ZzZgG, Обязательно прочитать перед созданием темы!

3

Re: AHK: Переназначить движение мыши на клавиши

Эм, название темы? Поменял..

4

Re: AHK: Переназначить движение мыши на клавиши

Проведите поиск в разделах AutoHotkey - Общение и AutoHotkey - Коллекция по слову "жесты".

5

Re: AHK: Переназначить движение мыши на клавиши

Есть аналогичные темы, но не один в один с моим запросом.  Сложно подправлять чужой код.

6

Re: AHK: Переназначить движение мыши на клавиши

Принцип простой: несколько раз в секунду проверять координаты курсора.

7

Re: AHK: Переназначить движение мыши на клавиши

Так. А если вы мне напишете, то это дорого будет?

8

Re: AHK: Переназначить движение мыши на клавиши

Кто-нибудь желает помочь форуму - ответить на халявный вопрос? Средства пойдут на хостинг.

9

Re: AHK: Переназначить движение мыши на клавиши

Если на год хватит, то я согласен!

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

10

Re: AHK: Переназначить движение мыши на клавиши

200 рублей норм?

11

Re: AHK: Переназначить движение мыши на клавиши

Вызов принят!

12

Re: AHK: Переназначить движение мыши на клавиши

Следующий скрипт преобразовывает движение курсора мышки в нажатие клавиш-стрелок "влево", "вправо", "вверх", "вниз".
Чтобы включить/выключить этот режим, нажмите Pause/Break.
По умолчанию курсор фиксируется в середине экрана. Чтобы изменить эти координаты, подвиньте курсор в нужное место и нажмите F8.


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

13

Re: AHK: Переназначить движение мыши на клавиши

Тестирую.

14

Re: AHK: Переназначить движение мыши на клавиши

http://i63.fastpic.ru/thumb/2015/0118/b2/f89245ca35d3ef1ac466f7503da192b2.jpeg
В Блокноте работает, в PCSX2 не работает ни с одним Mouse API.

15

Re: AHK: Переназначить движение мыши на клавиши

Был ещё такой вариант в подобной теме.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16

Re: AHK: Переназначить движение мыши на клавиши

M0ZzZgG пишет:

PCSX2 не работает ни с одним Mouse API

А этого не было в техзадании.


Судя по Вашей картинке, настраивать нужно не Mouse API, а Keyboard API.
1. Поставьте Windows messaging (Recommended).

2. Если п.1 не дал эффекта, поставьте в начало скрипта одну из следующих строк:

  • SendMode Event

  • SendMode Input

  • SendMode Play

  • SendMode InputThenPlay

3. Если всё равно не заработало,  поставьте Raw input (XP and later only) и снова прогоните п.2.

17

Re: AHK: Переназначить движение мыши на клавиши

Давно делал подобный скрипт, уже не помню зачем, но одно для себя усвоил точно: нужна "мертвая зона" вокруг нулевой отметки,  чтобы  при сдвиге на 1-2 пикселя не было ложных срабатываний. Или более сложная обработка перемещения - частота отправки клавиш зависит от величины смещения курсора от нулевой отметки или(и) от скорости перемещения.

18

Re: AHK: Переназначить движение мыши на клавиши

Да, но это уже "рюшечки". Можно курсор заменить на невидимый, можно под него окно "подложить", чтобы не вылезали ToolTip'ы. Если человеку нужно просто задействовать мышку в эмуляторе, всё это не понадобится.

Частоту нажатий можно регулировать периодом SetTimer. Можно считать смещение и на каждые N пикселей выдавать нажатие.

19 (изменено: Alectric, 2015-01-18 21:45:09)

Re: AHK: Переназначить движение мыши на клавиши

Вот когда-то использовал в PSX1.
Кнопки мыши назначены на кнопки X Y Z.
Нужно указать класс окна с которым работать.

#NoEnv
#SingleInstance,Force
SetTitleMatchMode,2
SetBatchLines,-1
CoordMode,Mouse,Screen
CoordMode,ToolTip
SetKeyDelay,0
SendMode,Input

timer:=0
coeffx=0.5   ; коэффициенты для мыши
coeffy=0.4

class=Notepad     ; класс окна.
#ifwinactive,ahk_class Notepad   ; тут тоже.


loop ; ШИМ мышь-клавиши
{
  if pressright>-1
  {
    pressright--
    if pressright=0
    {
      send,{right up}
      dooncex=
    }
  }
  if pressleft>-1
  {
    pressleft--
    if pressleft=0
    {
      send,{left up}
      dooncex=
    }
  }
  if pressdown>-1
  {
    pressdown--
    if pressdown=0
    {
      send,{down up}
      dooncey=
    }
  }
  if pressup>-1
  {
    pressup--
    if pressup=0
    {
      send,{up up}
      dooncey=
    }
  }

  if (timer:=timer>30 ? 0 : timer+1)
  {
    ifwinactive,ahk_class %class%
    {
      mousemove,a_screenwidth/2,a_screenheight/2,0
      mousegetpos,x1,y1
;      DllCall("Sleep",UInt,7)
      sleep,10
      mousegetpos,x2,y2
      x:=x1-x2
      y:=y1-y2
      if (x<-1 and dooncex="") ;право
      {
        dooncex=1
        pressleft=-1
        pressright:=-x*coeffx
        send,{right down}
        send,{left up}
      }
      if (x>1 and dooncex="") ;лево
      {
        dooncex=1
        pressright=-1
        pressleft:=x*coeffx
        send,{right up}
        send,{left down}
      }
      if (y<-1 and dooncey="") ;вниз
      {
        dooncey=1
        pressup=-1
        pressdown:=-y*coeffy
        send,{up up}
        send,{down down}
      }
      if (y>1 and dooncey="") ;вверх
      {
        dooncey=1
        pressdown=-1
        pressup:=y*coeffy
        send,{up down}
        send,{down up}
      }

      if (x=0 and dooncex=1)
      {
        pressright:=pressleft:=-1
        dooncex=
        send,{left up}
        send,{right up}
      }
      if (y=0 and dooncey=1)
      {
        pressup:=pressdown:=-1
        dooncey=
        send,{up up}
        send,{down up}
      }
    }
    else
      DllCall("Sleep",UInt,7)
  }
  else
    DllCall("Sleep",UInt,7)
}
return

lbutton::
send,{vk58 down}     ; X
return
lbutton up::
send,{vk58 up}
return

rbutton::
send,{vk59 down}     ; Y
return
rbutton up::
send,{vk59 up}
return

mbutton::
send,{vk5a down}     ; Z
return
mbutton up::
send,{vk5a up}
return

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

20 (изменено: M0ZzZgG, 2015-01-19 12:38:20)

Re: AHK: Переназначить движение мыши на клавиши

ypppu, ваш скрипт не работает даже после тех переборов, которые вы предложили.

Alectric, ваш скрипт работает.
Мне только нужно последний штрих - сделать, чтобы он зажимал Tab и работал при нажатой правой кнопке мыши. Попробовал добавить

loop
{GetKeyState, state, RButton
while state = D
{send,{tab down}
loop ; ШИМ мышь-клавиши
<основной скрипт>
}
return
}
return
}
return

C loop'ом всегда не работает, без него всегда работает, на зажатую кнопку мыши не реагирует.
И ещё. Я так понимаю, что чтобы назначить какие-либо другие кнопки на перемещения мыши, надо весь код перелопачивать, да?
Куда 200 руб. кинуть?

21

Re: AHK: Переназначить движение мыши на клавиши

В теме Поддержка данного ресурса atomix указал Яндекс-кошелёк.

22 (изменено: M0ZzZgG, 2015-01-19 14:00:41)

Re: AHK: Переназначить движение мыши на клавиши

Кинул. Поможете с while ? Так не работает:

while GetKeyState("RButton")
{
send,{tab down}
<основной скрипт>
}

Так работает всегда после нажатия на правую кнопку

~RButton::
 while GetKeyState("RButton")
 {
 send,{tab down}
 <основной скрипт>
 }
return

23

Re: AHK: Переназначить движение мыши на клавиши

M0ZzZgG пишет:

ypppu, ваш скрипт не работает даже после тех переборов, которые вы предложили.

Alectric, ваш скрипт работает.

Странно, так как принципиальных различий в скриптах не вижу. Могу предложить заменить в моём скрипте

Send, {Left}

на

Send, {Left down}{Left up}

и т. д. все четыре клавиши.

24

Re: AHK: Переназначить движение мыши на клавиши

Либо так:

Send{Left Down}
Sleep, 50
Send,{Left Up}

25

Re: AHK: Переназначить движение мыши на клавиши

ypppu пишет:

Send, {Left down}{Left up} и т. д. все четыре клавиши.

Так работает, но рывками. В отличие от конкурентного скрипта, у которого всё "плавно".
Как бы только сделать, чтобы он работал при зажатой клавише мыши.

26

Re: AHK: Переназначить движение мыши на клавиши

А если вписать вначале:

SetKeyDelay,0

плавнее будет?

27

Re: AHK: Переназначить движение мыши на клавиши

Malcev пишет:

А если вписать вначале:

SetKeyDelay,0

плавнее будет?

Так вообще не работает.

28

Re: AHK: Переназначить движение мыши на клавиши

M0ZzZgG пишет:

Кинул. Поможете с while ? Так не работает:

while GetKeyState("RButton")
{
send,{tab down}
<основной скрипт>
}

Так работает всегда после нажатия на правую кнопку

~RButton::
 while GetKeyState("RButton")
 {
 send,{tab down}
 <основной скрипт>
 }
return

while GetKeyState("RButton") означает "Пока ПКМ физиически нажата, выполнять ..."

29

Re: AHK: Переназначить движение мыши на клавиши

ypppu пишет:

while GetKeyState("RButton") означает "Пока ПКМ физиически нажата, выполнять ..."

Так это и нужно. Нужно, чтобы все эти перехваты перемещений происходили только при зажатой ПКМ.

скрипт работает.
Мне только нужно последний штрих - сделать, чтобы он зажимал Tab и работал при нажатой правой кнопке мыши.

30 (изменено: Alectric, 2015-01-19 17:34:59)

Re: AHK: Переназначить движение мыши на клавиши

Всеж просто:

#NoEnv
#SingleInstance,Force
SetTitleMatchMode,2
SetBatchLines,-1
CoordMode,Mouse,Screen
CoordMode,ToolTip
SetKeyDelay,0
SendMode,Input

timer:=0
coeffx=0.5   ; коэффициенты для мыши
coeffy=0.4

;class=Notepad     ; класс окна.
;#ifwinactive,ahk_class Notepad   ; тут тоже.


loop ; ШИМ мышь-клавиши
if getkeystate("RButton")
{
  if pressright>-1
  {
    pressright--
    if pressright=0
    {
      send,{right up}
      dooncex=
    }
  }
  if pressleft>-1
  {
    pressleft--
    if pressleft=0
    {
      send,{left up}
      dooncex=
    }
  }
  if pressdown>-1
  {
    pressdown--
    if pressdown=0
    {
      send,{down up}
      dooncey=
    }
  }
  if pressup>-1
  {
    pressup--
    if pressup=0
    {
      send,{up up}
      dooncey=
    }
  }

  if (timer:=timer>30 ? 0 : timer+1)
  {
;    ifwinactive,ahk_class %class%
    {
      mousemove,a_screenwidth/2,a_screenheight/2,0
      mousegetpos,x1,y1
;      DllCall("Sleep",UInt,7)
      sleep,10
      mousegetpos,x2,y2
      x:=x1-x2
      y:=y1-y2
      if (x<-1 and dooncex="") ;право
      {
        dooncex=1
        pressleft=-1
        pressright:=-x*coeffx
        send,{right down}
        send,{left up}
      }
      if (x>1 and dooncex="") ;лево
      {
        dooncex=1
        pressright=-1
        pressleft:=x*coeffx
        send,{right up}
        send,{left down}
      }
      if (y<-1 and dooncey="") ;вниз
      {
        dooncey=1
        pressup=-1
        pressdown:=-y*coeffy
        send,{up up}
        send,{down down}
      }
      if (y>1 and dooncey="") ;вверх
      {
        dooncey=1
        pressdown=-1
        pressup:=y*coeffy
        send,{up down}
        send,{down up}
      }

      if (x=0 and dooncex=1)
      {
        pressright:=pressleft:=-1
        dooncex=
        send,{left up}
        send,{right up}
      }
      if (y=0 and dooncey=1)
      {
        pressup:=pressdown:=-1
        dooncey=
        send,{up up}
        send,{down up}
      }
    }
;    else
;x      DllCall("Sleep",UInt,7)
  }
  else
    DllCall("Sleep",UInt,7)
}
else
  sleep,100
return

;lbutton::
;send,{vk58 down}     ; X
;return
;lbutton up::
;send,{vk58 up}
;return
;
;rbutton::
;send,{vk59 down}     ; Y
;return
;rbutton up::
;send,{vk59 up}
;return
;
;mbutton::
;send,{vk5a down}     ; Z
;return
;mbutton up::
;send,{vk5a up}
;return

^esc::  ; выход
exitapp

Выключить скрипт - Ctrl+Esc.

Сказал бы сразу что делать с кнопками. На что их назначить и при каком условии? Если зажата правая кнопка?
И в какой момент должен зажиматься\отпускаться "TAB"?

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

31

Re: AHK: Переназначить движение мыши на клавиши

Alectric, спасибо за отклик!
Скрипт рабочий, есть пара нюансов.
Во время того, как зажата правая кнопка, должен (+ к основному скрипту) зажиматься Tab.
Потом. Если можно, то желательно, чтобы зажимались не стрелки, а другие кнопки, н-р, Num4, Num6, Num8, Num5.
4 раза из 10 запусков после "отжатия" правой кнопки, остаётся "зажатой" ВЛЕВО, а потом после нажатия ПКМ ничего не происходит. Так и не понял, отчего зависят такие косяки.

32 (изменено: Alectric, 2015-01-19 17:06:39)

Re: AHK: Переназначить движение мыши на клавиши

M0ZzZgG пишет:

Так и не понял, отчего зависят такие косяки.

Зависит от перемещения мыши во время отпускания кнопки. Исправлю. Но не факт что "глючить" не будет.

а другие кнопки, н-р, Num4, Num6, Num8, Num5.

Минут через 20... Может раньше...

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

33 (изменено: Alectric, 2015-01-19 17:40:41)

Re: AHK: Переназначить движение мыши на клавиши

#NoEnv
#SingleInstance,Force
SetTitleMatchMode,2
SetBatchLines,-1
CoordMode,Mouse,Screen
CoordMode,ToolTip
SetKeyDelay,0
SendMode,Input

timer:=0
coeffx=0.5   ; коэффициенты для мыши
coeffy=0.4

;class=Notepad     ; класс окна.
;#ifwinactive,ahk_class Notepad   ; тут тоже.

loop ; ШИМ мышь-клавиши
if getkeystate("RButton")
{
  if dooncetab=
  {
    send,{tab down}
    dooncetab=1
  }
  if pressright>-1
  {
    pressright--
    if pressright=0
    {
      send,{vk66 up}
      dooncex=
    }
  }
  if pressleft>-1
  {
    pressleft--
    if pressleft=0
    {
      send,{vk64 up}
      dooncex=
    }
  }
  if pressdown>-1
  {
    pressdown--
    if pressdown=0
    {
      send,{vk62 up}
      dooncey=
    }
  }
  if pressup>-1
  {
    pressup--
    if pressup=0
    {
      send,{vk68 up}
      dooncey=
    }
  }

  if (timer:=timer>30 ? 0 : timer+1)
  {
;    ifwinactive,ahk_class %class%
    {
      mousemove,a_screenwidth/2,a_screenheight/2,0
      mousegetpos,x1,y1
      sleep,10
      mousegetpos,x2,y2
      x:=x1-x2
      y:=y1-y2
      if (x<-1 and dooncex="") ;право
      {
        dooncex=1
        pressleft=-1
        pressright:=-x*coeffx
        send,{vk66 down}
        send,{vk64 up}
      }
      if (x>1 and dooncex="") ;лево
      {
        dooncex=1
        pressright=-1
        pressleft:=x*coeffx
        send,{vk66 up}
        send,{vk64 down}
      }
      if (y<-1 and dooncey="") ;вниз
      {
        dooncey=1
        pressup=-1
        pressdown:=-y*coeffy
        send,{vk68 up}
        send,{vk62 down}
      }
      if (y>1 and dooncey="") ;вверх
      {
        dooncey=1
        pressdown=-1
        pressup:=y*coeffy
        send,{vk68 down}
        send,{vk62 up}
      }

      if (x=0 and dooncex=1)
      {
        pressright:=pressleft:=-1
        dooncex=
        send,{vk64 up}
        send,{vk66 up}
      }
      if (y=0 and dooncey=1)
      {
        pressup:=pressdown:=-1
        dooncey=
        send,{vk68 up}
        send,{vk62 up}
      }
    }
;    else
;      DllCall("Sleep",UInt,7)
  }
  else
    DllCall("Sleep",UInt,7)
}
else
{
  if dooncetab=1
  {
    send,{tab up}
    dooncetab=
    send,{vk62 up}
    send,{vk64 up}
    send,{vk66 up}
    send,{vk68 up}
  }
  sleep,100
}
return

#if dooncetab

lbutton::
send,{vk58 down}     ; X
return
lbutton up::
send,{vk58 up}
return

;rbutton::
;send,{vk59 down}     ; Y
;return
;rbutton up::
;send,{vk59 up}
;return
;
mbutton::
send,{vk5a down}     ; Z
return
mbutton up::
send,{vk5a up}
return

#if

^esc::pause  ; пауза
Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

34

Re: AHK: Переназначить движение мыши на клавиши

Отлично! Спасибо всем за помощь!

35 (изменено: Alectric, 2015-01-19 17:43:16)

Re: AHK: Переназначить движение мыши на клавиши

Переименуй тему лучше так: "Переназначить движение мыши на клавиши". Чтобы другим было проще искать. Имхо.

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

36 (изменено: M0ZzZgG, 2015-01-22 05:44:12)

Re: AHK: Переназначить движение мыши на клавиши

Если не трудно, можно ли, пожалуйста, добавить плюс к тому, что есть сейчас:
Чтобы при нажатой ПКМ WheelUp на мышке посылал Down (стрелку вниз), WheelDown посылал Up (стрелку вверх).
И ещё - перед тем, как перехватываются перемещения есть "мёртвая зона" в несколько пикселей. То есть, грубо говоря, если зажать ПКМ и двинуть мышкой "чуть-чуть", то ничего не происходит. Можно ли избавиться от этого - чтобы перехват перемещений происходил с первого же пикселя?

37

Re: AHK: Переназначить движение мыши на клавиши

Через 7 часов... если кто-нибудь раньше не напишет.

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

38

Re: AHK: Переназначить движение мыши на клавиши

#NoEnv
#SingleInstance,Force
SetTitleMatchMode,2
SetBatchLines,-1
CoordMode,Mouse,Screen
CoordMode,ToolTip
SetKeyDelay,0
SendMode,Input

timer:=0
coeffx=0.5   ; коэффициенты для мыши
coeffy=0.4

;class=Notepad     ; класс окна.
;#ifwinactive,ahk_class Notepad   ; тут тоже.

loop ; ШИМ мышь-клавиши
if getkeystate("RButton")
{
  if dooncetab=
  {
    send,{tab down}
    dooncetab=1
  }
  if pressright>-1
  {
    pressright--
    if pressright=0
    {
      send,{vk66 up}
      dooncex=
    }
  }
  if pressleft>-1
  {
    pressleft--
    if pressleft=0
    {
      send,{vk64 up}
      dooncex=
    }
  }
  if pressdown>-1
  {
    pressdown--
    if pressdown=0
    {
      send,{vk62 up}
      dooncey=
    }
  }
  if pressup>-1
  {
    pressup--
    if pressup=0
    {
      send,{vk68 up}
      dooncey=
    }
  }

  if (timer:=timer>30 ? 0 : timer+1)
  {
;    ifwinactive,ahk_class %class%
    {
      mousemove,a_screenwidth/2,a_screenheight/2,0
      mousegetpos,x1,y1
      sleep,10
      mousegetpos,x2,y2
      x:=x1-x2
      y:=y1-y2
      if (x<0 and dooncex="") ;право
      {
        dooncex=1
        pressleft=-1
        pressright:=-x*coeffx
        send,{vk66 down}
        send,{vk64 up}
      }
      if (x>0 and dooncex="") ;лево
      {
        dooncex=1
        pressright=-1
        pressleft:=x*coeffx
        send,{vk66 up}
        send,{vk64 down}
      }
      if (y<0 and dooncey="") ;вниз
      {
        dooncey=1
        pressup=-1
        pressdown:=-y*coeffy
        send,{vk68 up}
        send,{vk62 down}
      }
      if (y>0 and dooncey="") ;вверх
      {
        dooncey=1
        pressdown=-1
        pressup:=y*coeffy
        send,{vk68 down}
        send,{vk62 up}
      }

      if (x=0 and dooncex=1)
      {
        pressright:=pressleft:=-1
        dooncex=
        send,{vk64 up}
        send,{vk66 up}
      }
      if (y=0 and dooncey=1)
      {
        pressup:=pressdown:=-1
        dooncey=
        send,{vk68 up}
        send,{vk62 up}
      }
    }
;    else
;      DllCall("Sleep",UInt,7)
  }
  else
    DllCall("Sleep",UInt,7)
}
else
{
  if dooncetab=1
  {
    send,{tab up}
    dooncetab=
    send,{vk62 up}
    send,{vk64 up}
    send,{vk66 up}
    send,{vk68 up}
  }
  sleep,100
}
return

#if dooncetab

WheelUp::
send,{Down down}{Down up}
return

Wheeldown::
send,{up down}{up up}
return

lbutton::
send,{vk58 down}     ; X
return
lbutton up::
send,{vk58 up}
return

;rbutton::
;send,{vk59 down}     ; Y
;return
;rbutton up::
;send,{vk59 up}
;return

mbutton::
send,{vk5a down}     ; Z
return
mbutton up::
send,{vk5a up}
return

#if

^esc::pause  ; пауза
Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

39

Re: AHK: Переназначить движение мыши на клавиши

Мм, мышь действительно работает лучше, спасибо.
А нажатия от колёсика мыши в блокнот посылаются, например, а в PCSX2 - нет(
Хотя всё остальное в скрипте там работает.

40

Re: AHK: Переназначить движение мыши на клавиши

Попробуй так:

#NoEnv
#SingleInstance,Force
SetTitleMatchMode,2
SetBatchLines,-1
CoordMode,Mouse,Screen
CoordMode,ToolTip
SetKeyDelay,0
SendMode,Input

timer:=0
coeffx=0.5   ; коэффициенты для мыши
coeffy=0.4

;class=Notepad     ; класс окна.
;#ifwinactive,ahk_class Notepad   ; тут тоже.

loop ; ШИМ мышь-клавиши
if getkeystate("RButton")
{
  if dooncetab=
  {
    send,{tab down}
    dooncetab=1
  }
  if pressright>-1
  {
    pressright--
    if pressright=0
    {
      send,{vk66 up}
      dooncex=
    }
  }
  if pressleft>-1
  {
    pressleft--
    if pressleft=0
    {
      send,{vk64 up}
      dooncex=
    }
  }
  if pressdown>-1
  {
    pressdown--
    if pressdown=0
    {
      send,{vk62 up}
      dooncey=
    }
  }
  if pressup>-1
  {
    pressup--
    if pressup=0
    {
      send,{vk68 up}
      dooncey=
    }
  }

  if (timer:=timer>30 ? 0 : timer+1)
  {
;    ifwinactive,ahk_class %class%
    {
      mousemove,a_screenwidth/2,a_screenheight/2,0
      mousegetpos,x1,y1
      sleep,10
      mousegetpos,x2,y2
      x:=x1-x2
      y:=y1-y2
      if (x<0 and dooncex="") ;право
      {
        dooncex=1
        pressleft=-1
        pressright:=-x*coeffx
        send,{vk66 down}
        send,{vk64 up}
      }
      if (x>0 and dooncex="") ;лево
      {
        dooncex=1
        pressright=-1
        pressleft:=x*coeffx
        send,{vk66 up}
        send,{vk64 down}
      }
      if (y<0 and dooncey="") ;вниз
      {
        dooncey=1
        pressup=-1
        pressdown:=-y*coeffy
        send,{vk68 up}
        send,{vk62 down}
      }
      if (y>0 and dooncey="") ;вверх
      {
        dooncey=1
        pressdown=-1
        pressup:=y*coeffy
        send,{vk68 down}
        send,{vk62 up}
      }

      if (x=0 and dooncex=1)
      {
        pressright:=pressleft:=-1
        dooncex=
        send,{vk64 up}
        send,{vk66 up}
      }
      if (y=0 and dooncey=1)
      {
        pressup:=pressdown:=-1
        dooncey=
        send,{vk68 up}
        send,{vk62 up}
      }
    }
;    else
;      DllCall("Sleep",UInt,7)
  }
  else
    DllCall("Sleep",UInt,7)
}
else
{
  if dooncetab=1
  {
    send,{tab up}
    dooncetab=
    send,{vk62 up}
    send,{vk64 up}
    send,{vk66 up}
    send,{vk68 up}
  }
  sleep,100
}
return

#if dooncetab

WheelUp::
send,{Down down}
sleep,50
send,{Down up}
return

Wheeldown::
send,{up down}
sleep,50
send,{up up}
return

lbutton::
send,{vk58 down}     ; X
return
lbutton up::
send,{vk58 up}
return

;rbutton::
;send,{vk59 down}     ; Y
;return
;rbutton up::
;send,{vk59 up}
;return

mbutton::
send,{vk5a down}     ; Z
return
mbutton up::
send,{vk5a up}
return

#if

^esc::pause  ; пауза

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

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

41

Re: AHK: Переназначить движение мыши на клавиши

Со "слипами" работает. Спасибо!

42 (изменено: Alectric, 2015-08-16 13:04:54)

Re: AHK: Переназначить движение мыши на клавиши

Обновил код:

#NoEnv
#SingleInstance,Force
SetTitleMatchMode,2
SetBatchLines,-1
CoordMode,Mouse,Screen
CoordMode,ToolTip
SetKeyDelay,0
SendMode,Input



; Настройки:
class=EPSX     ; класс окна.

; клавиши.
Mouse_Up=up
Mouse_Down=down
Mouse_left=left
Mouse_Right=right
Mouse_LB=vk58 ; X
Mouse_RB=vk59 ; Y
Mouse_MB=vk5a ; Z

Delay=20       ; чувствительность.
coeffx=1.5     ; коэффициенты для мыши.
coeffy=1.5

Gui=1          ; прицел - требуется файл "xros.png", содержащий изображение прицела с прозрачным фоном.
Xoffset=-10    ; смещение прицела относительно центра экрана.
Yoffset=5
w=32           ; Размеры прицела.
h=32


; Начало.
if gui
{
  x:=(a_screenwidth/2-1-w/2)+Xoffset
  y:=(a_screenheight/2-1-h/2)+Yoffset

  Gui,-Caption +AlwaysOnTop +E0x08000020 +Lastfound
  Gui,Margin,0,0
  Gui,Add,Picture,w%w% h%h%,%a_scriptdir%\xros.png
  Gui,Show,NA x%x% y%y% w%w% h%h%
  ID:=WinExist()
  WinSet,ExStyle,+0x20,ahk_id %ID%
  WinSet,TransColor,0xF0F0F0,ahk_id %ID%
  Gui,hide
}

loop ; ШИМ мышь-клавиши
{
  if !WinActive("ahk_class " . class)
  {
    if gui
      gui,hide
    sleep,1000
    continue
  }

  mousemove,a_screenwidth/2,a_screenheight/2,0
  DllCall("Sleep",UInt,Delay)
  mousegetpos,x1,y1
  x:=a_screenwidth/2-x1, y:=a_screenheight/2-y1
 ; ------------------------------- право лево ----------------------------------
  if (x!=0 and !dooncex)
  {
    dooncex=1
    pressx:=abs(x)          ; x>0 = left; x<0 = right
    xx:=x
    send,% "{" Mouse_left " " (x<0 ? "Up" : "Down") "}{" Mouse_right " " (x>0 ? "Up" : "Down") "}"
  }
  else if (x=0 and dooncex)
  {
    dooncex=
    send,% "{" Mouse_left " up}{" Mouse_right " up}"
  }
  if ((pressx:=pressx-coeffx)<0 and pressx>-coeffx-1)
  {
    dooncex=
    send,% "{" (xx>0 ? Mouse_left : Mouse_right) " up}"
  }
 ; ------------------------------- верх низ ----------------------------------
  if (y!=0 and !dooncey)
  {
    dooncey=1
    pressy:=abs(y)            ; y>0 = up; y<0 = Down
    yy:=y
    send,% "{" Mouse_Up " " (y<0 ? "Up" : "Down") "}{" Mouse_Down " " (y>0 ? "Up" : "Down") "}"
  }
  else if (y=0 and dooncey)
  {
    dooncey=
    send,% "{" Mouse_Up " up}{" Mouse_Down " up}"
  }
  if ((pressy:=pressy-coeffy)<0 and pressy>-coeffy-1)
  {
    dooncey=
    send,% "{" (yy>0 ? Mouse_Up : Mouse_Down) " up}"
  }
 ; ------------------------------- gui update ----------------------------------
  if (gui and !showw:=showw>50 ? 0 : showw="" ? 1 : showw+1)
  {
    Gui, Show, na
    WinSet, AlwaysOnTop, On,ahk_id %ID%
  }
}
return


#if WinActive("ahk_class " . class)

lbutton::
send,{%Mouse_LB% down}
return
lbutton up::
send,{%Mouse_LB% up}
return

rbutton::
send,{%Mouse_RB% down}
return
rbutton up::
send,{%Mouse_RB% up}
return

mbutton::
send,{%Mouse_MB% down}
return
mbutton up::
send,{%Mouse_MB% up}
return

#if

!esc:: ; Alt+Esc
exitapp
Post's attachments

xros.zip 314 b, 9 downloads since 2015-08-16 

You don't have the permssions to download the attachments of this post.
Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.