不可阻挡的脚本问题

Posted

技术标签:

【中文标题】不可阻挡的脚本问题【英文标题】:Unstoppable script Issue 【发布时间】:2017-02-17 01:17:03 【问题描述】:

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

问题是:当我降低鼠标速度并增加鼠标延迟时,脚本变得无法停止:我按 F2、F3 和 ESC 键几次(试图让它停止)但脚本忽略它并继续运行 mousemoves .

这是我的问题的一个最小示例:

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】:

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

解决方案:

检查是否在每次鼠标移动后按下了热键,但这不是即时的; 实现您自己的 MouseMove,每移动 1px 后检查 GetKeyState;

使用带有热键的主脚本来运行/暂停/停止子进程:

停止:微不足道,使用Process Close 运行:孩子应该隐藏托盘图标,否则它会在进程关闭后保留 暂停:非平凡但有solutions(另见底层mechanics)。

【讨论】:

以上是关于不可阻挡的脚本问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新启动服务器的情况下停止 Jenkins 上不可阻挡的僵尸作业?

北斗剑阵, 爬虫IP破封不可阻挡

看来人工智能不可阻挡,将和网络与计算机一样服务于各行各业!

对象不可编写脚本意味着啥?

鬼脚本 |不可恢复的错误,退出代码 1

汉堡导航不可点击 - 已检查脚本和 CDN