我目前正试图在我的电脑上使用我的Xbox 360控制器实现以下功能:
如果JoyX或JoyY位置离开中心(50)至少10,那么必须小于40或大于60才会发生。
我需要它按住鼠标,同时能够根据操纵杆的移动移动鼠标位置。当JoyX和/或JoyY在40/60范围内时,鼠标左键必须上移。
到目前为止,我有:if(ismousedown = 1)
{
Send % "{Click " . ( GetKeyState("LButton") ? "Up}" : "Down}" )
ismousedown = 0
}
if(joyx > 60 || joyx < 40 || joyy > 60 || joyy < 40)
{
ismousedown = 1
MouseMove, mousex, mousey
}
else
{
ismousedown = 0
}
但这不起作用,因为操纵杆的移动检查是在无限循环内。
答案 0 :(得分:1)
为了避免无限循环,您需要将控件放在子程序中并设置定时器值。还有其他一些问题
这是我写的。我通过拖动桌面图标来测试它。它不是最佳选择,但它应该是一个很好的起点:
#SingleInstance
#Persistent
#NoEnv
SendMode Input
SetTimer, WatchJoystick, 10
GetKeyState, JoyInfo, JoyInfo
return
WatchJoystick:
IsMouseDown := false
GetKeyState, joyx, joyx
GetKeyState, joyy, joyy
if joyx > 60
{
IsMouseDown := true
MouseX := joyx - 60
}
else if joyx < 40
{
IsMouseDown := true
MouseX := joyx - 40
} else {
MouseX = 0
}
if joyy > 60
{
IsMouseDown := true
MouseY := joyy - 60
}
else if joyy < 40
{
IsMouseDown := true
MouseY := joyy - 40
} else {
MouseY = 0
}
if IsMouseDown
{
Click down
SetTImer, WaitForJoyCenter, 10
SetMouseDelay, -1
MouseMove, MouseX, MouseY, 0, R
}
WaitForJoyCenter:
if (joyx < 40 || joyx > 60 || joyy < 40 || joyy > 60)
return
Click up
SetTimer, WaitforJoyCenter, off
return