我尝试将光标垂直向下移动,直到到达显示器底部(1500),然后将其移回初始位置并环绕。
我遇到的问题是,每次触发滚轮向下时,MouseGetPos 也会重新评估。
我可以尝试在脚本首次运行时评估 MouseGetPos,但它仍然不准确,因为脚本可能运行了一个小时才会触发滚轮向下动作。
这是我迄今为止的代码,谢谢!
WheelDown::
MouseGetPos, xpos1, ypos1
xpos2 := xpos1
ypos2 := ypos1
MouseMove, % xpos2 +0, % ypos2 +90
if (ypos2 > 1500)
MouseMove, %xpos1%, %ypos1%
Return
esc::ExitApp
答案1
可能还有其他方法,但最简单的答案可能是明确定义要滚动回的“初始位置”。 一种方法是在调用时监视按键状态WheelDown::
:
例如 cursor_looping.ahk
esc::ExitApp
WheelDown::
MouseGetPos, xpos, ypos
; True or False
marker_key_is_down := GetKeyState("F7")
reset_key_is_down := GetKeyState("F4")
; Set a static y position
if (marker_key_is_down)
{
initial_y_position := ypos
}
; Return to "indefinite" scrolling
if (reset_key_is_down)
{
initial_y_position :=
}
MouseMove, % xpos +0, % ypos +90
if (ypos > 1500)
MouseMove, %xpos%, %initial_y_position%
Return
简而言之,使用上面的示例脚本,如果您按下 egF7然后用鼠标滚轮向下滚动一次,鼠标的原始位置将存储在 中initial_y_position
。此值是持久的。它不会被覆盖,除非您执行以下操作:
再次按下F7并向下滚动可设置新位置(无需清除先前的位置)。
按下 egF4并向下滚动可返回默认行为(即,无论滚动多长时间,鼠标都会停留在屏幕底部)。
关闭脚本。
注意事项
虽然我认为 F 键/向下滚动方法非常直观,但请记住它确实会在每次滚动时运行。您需要F7在第一次滚动后释放鼠标,才能正常工作(假设您的鼠标已经位于
y
您想要的位置)。要清除某个位置,请记住您需要按下 ex.F4并向下滚动至少一次。在这种情况下,多次滚动不会造成任何损害。
GetKeyState()
仅适用于单个键,因此您要监控的键的选择可能会受到限制。ypos > 1500
非常重要。这会影响脚本的运行方式。例如,如果 Windows 正在放大您的桌面,1920x1080 分辨率实际上可能只提供 150% 大小的 ~800 像素滚动距离,以使换行正常工作(例如ypos > 800
不是ypos > 1080
)。在这种情况下,滚动到 1080 是不可能的,因此永远不会触发此部分。
参考
- 获取按键状态()(自动热键)