如何设置由鼠标位置触发的按键?
How do I set up a keypress triggered by my mouse's position?
我一直在玩一个只使用 LeftArrow/A(向左走)、RightArrow/D(向右走)和 shift(冲刺)的游戏。我正在努力制作一个宏,它会根据我鼠标的 x 坐标向左或向右按,并在我的鼠标更靠近屏幕边缘时冲刺。为了说明这一点,将以下变量(括号内)视为屏幕上的不同点,“|”作为边缘:
|---冲刺区---(A)---步行区---(B)不动(C)---步行区---(D)---冲刺区- --|
如果我的x坐标小于A或大于D,我想发送SHIFT+A或SHIFT+D(分别)
如果我的 x 坐标在 A 和 B 之间或 C 和 D 之间,我想发送 A 或 D(分别)
我的死区会在B和C之间。
这是我的 .ahk 文件的代码:
CoordMode, Mouse, Screen
SetTimer, Check, 20
return
Check:
;The following variables are the x-coordinates of my screen, which has a res of 3840x2160
a := 965
b := 1700
c := 2160
d := 2895
MouseGetPos, x, y
return
MouseLoop:
while (x < b || x > c) {
MouseGetPos, x, y
if (x > c) {
if (x > d) {
Send +d
MouseGetPos, x, y
goto, MouseLoop
}
else if (x <= d) {
Send d
MouseGetPos, x, y
goto, MouseLoop
}
MouseGetPos, x, y
}
if (x < b) {
if (x < a) {
Send +a
MouseGetPos, x, y
goto, MouseLoop
}
else if (x >= a){
Send a
MouseGetPos, x, y
goto, MouseLoop
}
MouseGetPos, x, y
}
if GetKeyState("Esc") {
goto, Finished
}
}
return
goto, MouseLoop
Finished:
Exit
使用函数,您总能获得更好的概览、控制和性能:
#Persistent
SetTimer, Check, 20
return
Check:
If Zone("Sprint_Zone_1")
ToolTip, "Sprint_Zone_1" ; send +a
else
If Zone("Walk_Zone_1")
ToolTip, "Walk_Zone_1" ; send a
else
If Zone("Dead_Zone")
ToolTip
else
If Zone("Walk_Zone_2")
ToolTip, "Walk_Zone_2" ; send d
else
If Zone("Sprint_Zone_2")
ToolTip, "Sprint_Zone_2" ; send +d
return
Zone(name){
a := 965
b := 1700
c := 2160
d := 2895
CoordMode, Mouse, Screen
MouseGetPos, mX
Sprint_Zone_1 := (mX < a)
Walk_Zone_1 := (mX > a && mX < b)
Dead_Zone := (mX > b && mX < c)
Walk_Zone_2 := (mX > c && mX < d)
Sprint_Zone_2 := (mX > d)
If (name = "Sprint_Zone_1")
return Sprint_Zone_1
else if (name = "Walk_Zone_1")
return Walk_Zone_1
else if (name = "Dead_Zone")
return Dead_Zone
else if (name = "Walk_Zone_2")
return Walk_Zone_2
else if (name = "Sprint_Zone_2")
return Sprint_Zone_2
}
Esc::
SetTimer, Check, off
ToolTip
return
我一直在玩一个只使用 LeftArrow/A(向左走)、RightArrow/D(向右走)和 shift(冲刺)的游戏。我正在努力制作一个宏,它会根据我鼠标的 x 坐标向左或向右按,并在我的鼠标更靠近屏幕边缘时冲刺。为了说明这一点,将以下变量(括号内)视为屏幕上的不同点,“|”作为边缘:
|---冲刺区---(A)---步行区---(B)不动(C)---步行区---(D)---冲刺区- --|
如果我的x坐标小于A或大于D,我想发送SHIFT+A或SHIFT+D(分别) 如果我的 x 坐标在 A 和 B 之间或 C 和 D 之间,我想发送 A 或 D(分别) 我的死区会在B和C之间。
这是我的 .ahk 文件的代码:
CoordMode, Mouse, Screen
SetTimer, Check, 20
return
Check:
;The following variables are the x-coordinates of my screen, which has a res of 3840x2160
a := 965
b := 1700
c := 2160
d := 2895
MouseGetPos, x, y
return
MouseLoop:
while (x < b || x > c) {
MouseGetPos, x, y
if (x > c) {
if (x > d) {
Send +d
MouseGetPos, x, y
goto, MouseLoop
}
else if (x <= d) {
Send d
MouseGetPos, x, y
goto, MouseLoop
}
MouseGetPos, x, y
}
if (x < b) {
if (x < a) {
Send +a
MouseGetPos, x, y
goto, MouseLoop
}
else if (x >= a){
Send a
MouseGetPos, x, y
goto, MouseLoop
}
MouseGetPos, x, y
}
if GetKeyState("Esc") {
goto, Finished
}
}
return
goto, MouseLoop
Finished:
Exit
使用函数,您总能获得更好的概览、控制和性能:
#Persistent
SetTimer, Check, 20
return
Check:
If Zone("Sprint_Zone_1")
ToolTip, "Sprint_Zone_1" ; send +a
else
If Zone("Walk_Zone_1")
ToolTip, "Walk_Zone_1" ; send a
else
If Zone("Dead_Zone")
ToolTip
else
If Zone("Walk_Zone_2")
ToolTip, "Walk_Zone_2" ; send d
else
If Zone("Sprint_Zone_2")
ToolTip, "Sprint_Zone_2" ; send +d
return
Zone(name){
a := 965
b := 1700
c := 2160
d := 2895
CoordMode, Mouse, Screen
MouseGetPos, mX
Sprint_Zone_1 := (mX < a)
Walk_Zone_1 := (mX > a && mX < b)
Dead_Zone := (mX > b && mX < c)
Walk_Zone_2 := (mX > c && mX < d)
Sprint_Zone_2 := (mX > d)
If (name = "Sprint_Zone_1")
return Sprint_Zone_1
else if (name = "Walk_Zone_1")
return Walk_Zone_1
else if (name = "Dead_Zone")
return Dead_Zone
else if (name = "Walk_Zone_2")
return Walk_Zone_2
else if (name = "Sprint_Zone_2")
return Sprint_Zone_2
}
Esc::
SetTimer, Check, off
ToolTip
return