所以我正在尝试创建一个脚本,在按住鼠标中键的同时左右滚动。但是,无论是否按住鼠标中键,左右滚动都会滚动。它总是执行。我需要帮助来解决这个问题。
(我注意到第21行有太多空间,忽略它) 代码:
; Hold the scroll wheel and scroll to scroll horizontally
; Scroll up = left, scroll down = right
#NoEnv
;#InstallMouseHook
#HotkeyInterval 1
#MaxHotkeysPerInterval 1000000 ; Prevents the popup when scrolling too fast
GetKeyState, ScrollState, MButton
if(ScrollState = U)
{
;return
}
else if(ScrollState = D)
{
WheelUp::Send {WheelLeft}
return
WheelDown:: Send {WheelRight}
return
}
return
答案 0 :(得分:3)
此方法保留所有正常的中间点击功能,但只需在按下时切换变量state
。每当使用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}
*/
答案 1 :(得分:1)
由双冒号定义的热键不受常规if
语句控制。要使热键上下文相关,您需要使用#If
(或#IfWinActive
或#IfWinExist
)。文档中的示例(上下文相关热键部分):
#If MouseIsOver("ahk_class Shell_TrayWnd")
WheelUp::Send {Volume_Up} ; Wheel over taskbar: increase/decrease volume.
WheelDown::Send {Volume_Down} ;
您还可以将常规if
逻辑放在热键中(以下是热键提示和备注部分中的示例):
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
通过#If
的上下文敏感性用于控制热键所在的应用程序。热键定义中的常规if
逻辑适用于任意条件。你想要做的是适合后者。
在许多情况下,两者都很有用。例如,如果您只想在浏览器中而不是在Microsoft Word中使用左/右行为,则可以使用#If
将热键活动限制为浏览器,然后在热键定义中将if GetKeyState(...)
限制为检查是否按下了滚动按钮。