Тема: AHK: Переназначить движение мыши на клавиши
Здравствуйте! Не могли бы вы помочь мне модифицировать хук мыши под такую потребность: чтобы по перемещению мыши в одном из четырёх направлений посылалось нажатие определённой клавиши.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Здравствуйте! Не могли бы вы помочь мне модифицировать хук мыши под такую потребность: чтобы по перемещению мыши в одном из четырёх направлений посылалось нажатие определённой клавиши.
Эм, название темы? Поменял..
Проведите поиск в разделах AutoHotkey - Общение и AutoHotkey - Коллекция по слову "жесты".
Есть аналогичные темы, но не один в один с моим запросом. Сложно подправлять чужой код.
Принцип простой: несколько раз в секунду проверять координаты курсора.
Так. А если вы мне напишете, то это дорого будет?
Кто-нибудь желает помочь форуму - ответить на халявный вопрос?
Средства пойдут на хостинг.
Если на год хватит, то я согласен!
200 рублей норм?
Вызов принят!
Следующий скрипт преобразовывает движение курсора мышки в нажатие клавиш-стрелок "влево", "вправо", "вверх", "вниз".
Чтобы включить/выключить этот режим, нажмите 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Тестирую.
Был ещё такой вариант в подобной теме.
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.
Давно делал подобный скрипт, уже не помню зачем, но одно для себя усвоил точно: нужна "мертвая зона" вокруг нулевой отметки, чтобы при сдвиге на 1-2 пикселя не было ложных срабатываний. Или более сложная обработка перемещения - частота отправки клавиш зависит от величины смещения курсора от нулевой отметки или(и) от скорости перемещения.
Да, но это уже "рюшечки". Можно курсор заменить на невидимый, можно под него окно "подложить", чтобы не вылезали ToolTip'ы. Если человеку нужно просто задействовать мышку в эмуляторе, всё это не понадобится.
Частоту нажатий можно регулировать периодом SetTimer. Можно считать смещение и на каждые N пикселей выдавать нажатие.
Вот когда-то использовал в 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
ypppu, ваш скрипт не работает даже после тех переборов, которые вы предложили.
Alectric, ваш скрипт работает.
Мне только нужно последний штрих - сделать, чтобы он зажимал Tab и работал при нажатой правой кнопке мыши. Попробовал добавить
loop
{GetKeyState, state, RButton
while state = D
{send,{tab down}
loop ; ШИМ мышь-клавиши
<основной скрипт>
}
return
}
return
}
returnC loop'ом всегда не работает, без него всегда работает, на зажатую кнопку мыши не реагирует.
И ещё. Я так понимаю, что чтобы назначить какие-либо другие кнопки на перемещения мыши, надо весь код перелопачивать, да?
Куда 200 руб. кинуть?
В теме Поддержка данного ресурса atomix указал Яндекс-кошелёк.
Кинул. Поможете с while ? Так не работает:
while GetKeyState("RButton")
{
send,{tab down}
<основной скрипт>
}Так работает всегда после нажатия на правую кнопку
~RButton::
while GetKeyState("RButton")
{
send,{tab down}
<основной скрипт>
}
returnypppu, ваш скрипт не работает даже после тех переборов, которые вы предложили.
Alectric, ваш скрипт работает.
Странно, так как принципиальных различий в скриптах не вижу. Могу предложить заменить в моём скрипте
Send, {Left}на
Send, {Left down}{Left up}и т. д. все четыре клавиши.
Либо так:
Send{Left Down}
Sleep, 50
Send,{Left Up}Send, {Left down}{Left up} и т. д. все четыре клавиши.
Так работает, но рывками. В отличие от конкурентного скрипта, у которого всё "плавно".
Как бы только сделать, чтобы он работал при зажатой клавише мыши.
А если вписать вначале:
SetKeyDelay,0плавнее будет?
А если вписать вначале:
SetKeyDelay,0плавнее будет?
Так вообще не работает.
Кинул. Поможете с while ? Так не работает:
while GetKeyState("RButton") { send,{tab down} <основной скрипт> }Так работает всегда после нажатия на правую кнопку
~RButton:: while GetKeyState("RButton") { send,{tab down} <основной скрипт> } return
while GetKeyState("RButton") означает "Пока ПКМ физиически нажата, выполнять ..."
while GetKeyState("RButton") означает "Пока ПКМ физиически нажата, выполнять ..."
Так это и нужно. Нужно, чтобы все эти перехваты перемещений происходили только при зажатой ПКМ.
скрипт работает.
Мне только нужно последний штрих - сделать, чтобы он зажимал Tab и работал при нажатой правой кнопке мыши.
Всеж просто:
#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"?
Alectric, спасибо за отклик!
Скрипт рабочий, есть пара нюансов.
Во время того, как зажата правая кнопка, должен (+ к основному скрипту) зажиматься Tab.
Потом. Если можно, то желательно, чтобы зажимались не стрелки, а другие кнопки, н-р, Num4, Num6, Num8, Num5.
4 раза из 10 запусков после "отжатия" правой кнопки, остаётся "зажатой" ВЛЕВО, а потом после нажатия ПКМ ничего не происходит. Так и не понял, отчего зависят такие косяки.
Так и не понял, отчего зависят такие косяки.
Зависит от перемещения мыши во время отпускания кнопки. Исправлю. Но не факт что "глючить" не будет.
а другие кнопки, н-р, Num4, Num6, Num8, Num5.
Минут через 20... Может раньше...
#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 ; пауза
Отлично! Спасибо всем за помощь!
Переименуй тему лучше так: "Переназначить движение мыши на клавиши". Чтобы другим было проще искать. Имхо.
Если не трудно, можно ли, пожалуйста, добавить плюс к тому, что есть сейчас:
Чтобы при нажатой ПКМ WheelUp на мышке посылал Down (стрелку вниз), WheelDown посылал Up (стрелку вверх).
И ещё - перед тем, как перехватываются перемещения есть "мёртвая зона" в несколько пикселей. То есть, грубо говоря, если зажать ПКМ и двинуть мышкой "чуть-чуть", то ничего не происходит. Можно ли избавиться от этого - чтобы перехват перемещений происходил с первого же пикселя?
Через 7 часов... если кто-нибудь раньше не напишет.
#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 ; пауза
Мм, мышь действительно работает лучше, спасибо.
А нажатия от колёсика мыши в блокнот посылаются, например, а в PCSX2 - нет(
Хотя всё остальное в скрипте там работает.
Попробуй так:
#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"ы в самом низу кода. Правда из-за этого будет "подвисать" клавиши на движение мыши.
Со "слипами" работает. Спасибо!
Обновил код:
#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
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться