Autohotkey (AHK)带有GetKeyState的If语句不工作?

Autohotkey (AHK)带有GetKeyState的If语句不工作?,autohotkey,Autohotkey,所以我试图创建一个脚本,在按住鼠标中键的同时左右滚动。但是,无论是否按住鼠标中键,都会向左和向右滚动。它总是执行。我需要帮助来解决这个问题 (我注意到第21行的空间有点太大,忽略这一点) 代码: 此方法保留所有正常的鼠标中键单击功能,但只需在按下时切换变量状态。无论何时使用Wheelup或Wheeldown,都会检查此变量 ~Mbutton:: state := 1 Return ~Mbutton up:: state := 0 Return WheelUp:: Send %

所以我试图创建一个脚本,在按住鼠标中键的同时左右滚动。但是,无论是否按住鼠标中键,都会向左和向右滚动。它总是执行。我需要帮助来解决这个问题

(我注意到第21行的空间有点太大,忽略这一点) 代码:


此方法保留所有正常的鼠标中键单击功能,但只需在按下时切换变量
状态
。无论何时使用Wheelup或Wheeldown,都会检查此变量

~Mbutton::
    state := 1
Return

~Mbutton up::
    state := 0
Return

WheelUp:: Send % (state) ? "{WheelLeft}" : "{WheelUp}"
WheelDown:: Send % (state) ? "{WheelRight}" : "{WheelDown}"

/*
The ternary operators are short for:
If state = 1
    Send {WheelLeft}
else
    Send {WheelUp}
*/

此方法保留所有正常的鼠标中键单击功能,但只需在按下时切换变量
状态
。无论何时使用Wheelup或Wheeldown,都会检查此变量

~Mbutton::
    state := 1
Return

~Mbutton up::
    state := 0
Return

WheelUp:: Send % (state) ? "{WheelLeft}" : "{WheelUp}"
WheelDown:: Send % (state) ? "{WheelRight}" : "{WheelDown}"

/*
The ternary operators are short for:
If state = 1
    Send {WheelLeft}
else
    Send {WheelUp}
*/

由双冒号定义的热键不受常规
if
语句的控制。要使热键上下文敏感,需要使用
#If
(或
#IfWinActive
#IfWinExist
)。文档中的示例(上下文相关热键部分):

您还可以将常规的
if
逻辑放入热键中(以下是热键提示和备注部分的示例):

如果用于控制热键在哪个应用程序中处于活动状态,则通过
#进行上下文敏感。热键定义中的常规
if
逻辑用于任意条件。你想做的符合后者


在许多情况下,这两种方法都很有用。例如,如果您只想在浏览器中使用左/右行为,而不想在Microsoft Word中使用左/右行为,您可以使用
\If
将热键活动限制在浏览器中,然后在热键定义中使用
If GetKeyState(…)
检查是否按下了滚动按钮。

热键,由双冒号定义,不受常规
if
语句控制。要使热键上下文敏感,需要使用
#If
(或
#IfWinActive
#IfWinExist
)。文档中的示例(上下文相关热键部分):

您还可以将常规的
if
逻辑放入热键中(以下是热键提示和备注部分的示例):

如果
用于控制热键在哪个应用程序中处于活动状态,则通过
#进行上下文敏感。热键定义中的常规
if
逻辑用于任意条件。你想做的符合后者


在许多情况下,这两种方法都很有用。例如,如果您只想在浏览器中使用左/右行为,而不想在Microsoft Word中使用左/右行为,您可以使用
#If
将热键活动限制在浏览器中,然后在热键定义中使用
If GetKeyState(…)
检查是否按下了滚动按钮。

谢谢。如果你能解释一下最后两行的意思(尤其是%和?符号),那就好了。它使用了所谓的三元运算符,即缩写的If/then/else。因此,对于Wheelup,如果
state=1
,则发送结果
{WheelLeft}
,否则发送
{Wheelup}
。为了清楚起见,我补充了我的答案。谢谢你。如果你能解释一下最后两行的意思(尤其是%和?符号),那就好了。它使用了所谓的三元运算符,即缩写的If/then/else。因此,对于Wheelup,如果
state=1
,则发送结果
{WheelLeft}
,否则发送
{Wheelup}
。为了清楚起见,我补充了我的答案。
#If MouseIsOver("ahk_class Shell_TrayWnd")
WheelUp::Send {Volume_Up}     ; Wheel over taskbar: increase/decrease volume.
WheelDown::Send {Volume_Down} ; 
Joy2::
if not GetKeyState("Control")  ; Neither the left nor right Control key is down.
    return  ; i.e. Do nothing.
MsgBox You pressed the first joystick's second button while holding down the Control key.
return