1

Тема: Координаты курсора в игре постоянные

Здравствуйте. Хочу написать скрипт для auto-strafe в игре CS:GO. Заключается в следующем: по нажатию SPACE происходит нажатие клавиши D и одновременное перемещение мыши, например, на 100 пикселей вправо относительно текущего положения, затем нажатие клавиши A и перемещение мыши на 100 пикселей влево.

Познакомившись с AHK только сегодня, я написал следующий код:

SPACE::
BlockInput, On
Send {D down}  ; Нажать клавишу D.
Sleep 1000  ; Держать её нажатой 1 секунду.
Send {D up}  ; Отпустить.
MouseMove, 100, 0, 50, R
Send {A down}  ; Нажать клавишу А.
Sleep 1000  ; Держать её нажатой 1 секунду.
Send {A up}  ; Отпустить.
MouseMove, -100, 0, 50, R
BlockInput, Off
Return

Проблема в том, что в игре происходят странные движения мышью. Связано это, я думаю, с тем, что координаты мыши (прицела) в игре постоянные: 960;540 (мое разрешение 1920x1080). Подскажите, как осуществить движение мыши влево-вправо? И еще вопрос: как сделать одновременное нажатие клавиши и движение мыши, ведь в моем коде это происходит последовательно?

2

Re: Координаты курсора в игре постоянные

Посмотрев другие темы, я нашел команды, которые, возможно, мне помогут:

~*$vk44::
while GetKeyState("vk44","P")
{
DllCall("mouse_event",uint,1,int,100,int,0,uint,0,int,0)
DllCall("Sleep", UInt, 10)
}
Return

И действительно, при удержании клавиши D в игре происходит нужное мне перемещение мыши вправо. Теперь я написал следующий код:

SPACE::
BlockInput, On
Send {D down}
while GetKeyState("vk44")
{
DllCall("mouse_event",uint,1,int,100,int,0,uint,0,int,0)
DllCall("Sleep", UInt, 10)
}
Send {D up}
Send {A down}
while GetKeyState("vk41")
{
DllCall("mouse_event",uint,1,int,-100,int,0,uint,0,int,0)
DllCall("Sleep", UInt, 10)
}
Send {A up} 
BlockInput, Off
Return

В моем коде получается, что условие выполняется бесконечно, пока нажата клавиша. Подскажите, как сделать так, чтобы удержание клавиши D и перемещение мыши длилось, допустим, 0.2 сек, а затем клавиша отпускалась? То есть, как остановить условие while?

3 (изменено: Alectric, 2015-12-12 17:24:39)

Re: Координаты курсора в игре постоянные

Здесь цикл вообще не нужен. Просто меняй расстояние, на которое перемещать мышку:

dx:=256 ; расстояние перемещения мыши

SPACE::
BlockInput, On

Send {D down}
DllCall("mouse_event",uint,1,int,dx,int,0,uint,0,int,0)
Send {D up}

sleep,1000

Send {A down}
DllCall("mouse_event",uint,1,int,-dx,int,0,uint,0,int,0)
Send {A up}

BlockInput, Off
Return

mouse_event function

OFF:
Кстати, какой тип данных указывать для ULONG_PTR?

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