不可阻挡的脚本问题

时间:2017-02-17 01:17:03

标签: autohotkey

我有一个脚本,它使用几个鼠标移动,并在需要时,我按F3停止强制重新加载的动作或ESC停止退出应用程序的移动。它工作正常,没有常规速度的问题。

问题是:当我减少mousespeed并增加鼠标延迟时,脚本变得不可阻挡:我按下F2,F3和ESC键几次(试图让它停止)但脚本忽略它并继续运行鼠标移动

这是我的问题的最小例子:

SendMode Input

$F1::
SetDefaultMouseSpeed, 50
SetMouseDelay, 30

Mousemove, 200, 200
Mousemove, 600, 600
Mousemove, 200, 200
Mousemove, 600, 600
Mousemove, 200, 200
Mousemove, 600, 600
Mousemove, 200, 200
Mousemove, 600, 600
Mousemove, 200, 200
Mousemove, 600, 600
Mousemove, 200, 200
Mousemove, 600, 600
Mousemove, 200, 200
Mousemove, 600, 600
Mousemove, 200, 200
Mousemove, 600, 600
Mousemove, 200, 200
Mousemove, 600, 600
Mousemove, 200, 200
Mousemove, 600, 600
Mousemove, 200, 200
Mousemove, 600, 600

SoundPlay, *48
return

$F2:: Pause
$F3:: Reload
$ESC:: ExitApp

为什么会发生这种情况?如何修复它(即使低速+高延迟,如何停止脚本)? ps:F1键启动mousemoves序列。

1 个答案:

答案 0 :(得分:2)

具有非零速度的MouseMove不能被同一AHK脚本中的另一个热键中断,因为Autohotkey在内部是单线程的(它只是emulates类似线程的行为)并且每个都执行blocking sleep鼠标微动直到达到你指定的总距离。

解决方案:

  • 检查每个MouseMove后是否按下了热键,但它是非瞬时的;
  • 实施您自己的MouseMove,在每次1px移动后检查GetKeyState;
  • 使用包含运行/暂停/停止子项的热键的主脚本:

    停止:琐碎,使用Process Close
    跑步:孩子应该隐藏托盘图标,否则它将在过程关闭后停留
    暂停:非常重要,但有solutions(另请参见基础mechanics)。