Тема: AHK: Эмуляция мыши при помощи клавиатуры
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; Global Variabless ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HatDelay = 10 ; Время таймера
XSensitivity := 5 ; Начальная скорость передвижения мыши по горизонтали.
YSensitivity := 5 ; Начальная скорость передвижения мыши по вертикали.
XAcceleration := 3 ; Ускорение мыши по горизонтали. Чем больше значение, тем быстрее будет ускорение мыши.
YAcceleration := 3 ; Ускорение мыши по вертикали. Чем больше значение, тем быстрее будет ускорение мыши.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; Body ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SetTimer, KeyMouse, %HatDelay%
KeyMouse:
{
GetKeyState, AState, A
GetKeyState, WState, W
GetKeyState, SState, S
GetKeyState, DState, D
if (AState = U) && (WState = U) && (SState = U) && (DState = U)
{
XSensitivity2 := XSensitivity ; Скорость передвижения мыши по горизонтали.
YSensitivity2 := YSensitivity ; Скорость передвижения мыши по вертикали.
}
if DState = D ; Если нажать кнопку
{
XAxis := XSensitivity2
}
if SState = D ; Если нажать кнопку
{
YAxis := YSensitivity2
}
if AState = D ; Если нажать кнопку
{
XAxis := -XSensitivity2
}
if WState = D ; Если нажать кнопку
{
YAxis := -YSensitivity2
}
if (AState = D || WState = D || SState = D || DState = D) ; Проверка состояния клавиш
{
DllCall("mouse_event", UInt, 0x1
, Int, XAxis
, Int, YAxis
, UInt, 0
, Int, 0)
XSensitivity2 += %XAcceleration%
YSensitivity2 += %YAcceleration%
}
}
Return
Joy25::
{
}
ReturnРешил написать простенький эмулятор мыши с ускорением. Не работает он. Я не могу найти свою ошибку. Она где-то здесь:
if (AState = U) && (WState = U) && (SState = U) && (DState = U)
{
XSensitivity2 := XSensitivity ; Скорость передвижения мыши по горизонтали.
YSensitivity2 := YSensitivity ; Скорость передвижения мыши по вертикали.
}и здесь:
if (AState = D || WState = D || SState = D || DState = D) ; Проверка состояния клавиш
{
DllCall("mouse_event", UInt, 0x1
, Int, XAxis
, Int, YAxis
, UInt, 0
, Int, 0)
XSensitivity2 += %XAcceleration%
YSensitivity2 += %YAcceleration%
}Стоит убрать
if (AState = D || WState = D || SState = D || DState = D)и эмулятор начинает работать.
Что-то не так с проверкой состояния клавиш. Подскажите, плз, в чем проблема?
Каждую строчку по 10 раз перечитал, не хочет работать ![]()
GetKeyState работает нормально.
if по отдельности тоже работает, например:
if AState = D ; Если нажать кнопку
{
XAxis := -XSensitivity2
}а вот это:
if AState = D && SState = D ; Если нажать кнопку
{
XAxis := -XSensitivity2
}уже работать не будет.
И вроде должно, не?

