脚本为何停止工作?

时间:2019-04-30 20:43:57

标签: autohotkey

代码     WheelUp ::     MouseGetPos,MouseX,MouseY     PixelGetColor,颜色,%MouseX%,%MouseY%     如果(颜色= 0x282828)     {     发送{sc149}     }     否则(颜色<> 0x282828)     {         点击,WheelUp     }     返回

WheelDown::
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%
if (color = 0x282828)
{
    Send, {sc151}
}
Else if (color <> 0x282828)
{
    Click, WheelDown
}
return

1 个答案:

答案 0 :(得分:1)

我想您正在尝试在向上或向下滚动的同时在屏幕上搜索某种颜色。但是,Click, WheelDown不会触发您自己的AHK热键,因此您将没有递归热键,为了解决此问题,您可以使用Goto关键字显式执行相应的热键:

WheelDown::
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%
if (color = 0x282828) {
    Send, {sc151}
}
Else if (color <> 0x282828) {
    Click, WheelDown
    Goto, WheelDown
}
return

关于进一步的优化,我强烈建议您使用while循环,其用法如以下代码所示:

WheelUp::
w_up_stop := False
w_down_stop := True
ToolTip, Scrolling up
while (color <> 0x282828 and !w_up_stop) {
MouseGetPos, MouseX, MouseY
    PixelGetColor, color, %MouseX%, %MouseY%
    Click, WheelUp
}
Send, {sc149}
return

WheelDown::
w_up_stop := True
w_down_stop := False
ToolTip, Scrolling Down
while (color <> 0x282828 and !w_down_stop) {
    MouseGetPos, MouseX, MouseY
    PixelGetColor, color, %MouseX%, %MouseY%
    Click, WheelDown
}
Send, {sc151}
return

此外,如果您找不到要搜索的颜色,我会添加一个热键来中断循环:

#If w_down_stop or w_up_stop
Esc::
w_down_stop := False
w_up_stop := False