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