autohotkey始终按住鼠标左键

时间:2014-10-25 23:14:16

标签: autohotkey

我目前正试图在我的电脑上使用我的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
}

但这不起作用,因为操纵杆的移动检查是在无限循环内。

1 个答案:

答案 0 :(得分:1)

为了避免无限循环,您需要将控件放在子程序中并设置定时器值。还有其他一些问题

  • 操纵杆的X和Y移动应分开
  • 鼠标按下应该有一个计时器以防止向下/向上循环

这是我写的。我通过拖动桌面图标来测试它。它不是最佳选择,但它应该是一个很好的起点:

#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