【发布时间】:2018-01-23 19:39:21
【问题描述】:
昨天在调试我的 AutoHotkey 脚本时,我不小心触发了 MouseMove 和 MouseClick 事件的无限循环。每隔 0.5 秒,我的鼠标就会点击屏幕的随机部分。
在尝试使用任务管理器终止 AHK 失败后,我最终关闭了计算机以结束脚本。
如何停止活动的 AutoHotkey 脚本?
【问题讨论】:
标签: autohotkey
昨天在调试我的 AutoHotkey 脚本时,我不小心触发了 MouseMove 和 MouseClick 事件的无限循环。每隔 0.5 秒,我的鼠标就会点击屏幕的随机部分。
在尝试使用任务管理器终止 AHK 失败后,我最终关闭了计算机以结束脚本。
如何停止活动的 AutoHotkey 脚本?
【问题讨论】:
标签: autohotkey
结束活动脚本的最可靠方法是先发制人地包含紧急ExitApp 热键。一种常见的做法是将以下内容放在任何脚本的底部。
Esc::ExitApp ; Exit script with Escape key
您还可以将热键设置为 pause、suspend 或 reload 您的脚本。
^!p::Pause ; Pause script with Ctrl+Alt+P
^!s::Suspend ; Suspend script with Ctrl+Alt+S
^!r::Reload ; Reload script with Ctrl+Alt+R
在 Windows 10/8/7/Vista 上,您可以使用键盘快捷键 Ctrl+Alt+Delete 快速注销,然后通过 Alt+L。
这是因为按下 Ctrl+Alt+Delete 会打开一个特殊的窗口,该窗口不能被 AutoHotkey 等程序操作。
如果您可以控制键盘和鼠标,您可以通过右键单击任务栏中 AutoHotkey 的绿色 H 图标并选择“退出”来结束脚本
为了更通用的解决方案,AHK 用户 None 写了AHKPanic(),这是一个可以暂停、挂起或终止所有其他正在运行的脚本的方法。 (可选地结束调用它的脚本)
AHKPanic(Kill=0, Pause=0, Suspend=0, SelfToo=0) {
DetectHiddenWindows, On
WinGet, IDList ,List, ahk_class AutoHotkey
Loop %IDList%
{
ID:=IDList%A_Index%
WinGetTitle, ATitle, ahk_id %ID%
IfNotInString, ATitle, %A_ScriptFullPath%
{
If Suspend
PostMessage, 0x111, 65305,,, ahk_id %ID% ; Suspend.
If Pause
PostMessage, 0x111, 65306,,, ahk_id %ID% ; Pause.
If Kill
WinClose, ahk_id %ID% ;kill
}
}
If SelfToo
{
If Suspend
Suspend, Toggle ; Suspend.
If Pause
Pause, Toggle, 1 ; Pause.
If Kill
ExitApp
}
}
【讨论】:
如果您想关闭特定窗口而不执行循环,我创建了以下内容:
DetectHiddenWindows, On
path = %A_Desktop%\Test.ahk - AutoHotkey v1.1.26.01
path2 = %A_Desktop%\Test2.ahk - AutoHotkey v1.1.26.01
WinClose, %path%
WinClose, %path2%
**注1:**文件名+“-AutoHotKey blah blah blah”(这是打开隐藏在右下角靠近时钟的窗口时的热键窗口名称)
**注2:**文件名必须区分大小写。
【讨论】:
如果您想花哨并从 Windows 命令提示符中停止它,
停止所有自动热键脚本:
taskkill /im "autohotkey.exe"
停止特定脚本:
wmic process where "commandline like '%%MyScript.ahk'" delete
【讨论】:
wmic process where "commandline like '%%MyScript.ahk'" delete 如果它不起作用,可能是其他问题,例如 bat 文件不起作用或权限问题或其他问题。我建议您请朋友、老板或老师帮助您。
你也可以让你的脚本#SingleInstance force 并注意“-quit”参数或其他东西。
#SingleInstance force
#Persistent
If A_Args[1] == "--stop"
ExitApp
; just some random stuff for the script to do
count := 0
Loop,
{
count++
Tooltip, %count%
Sleep, 200
}
所以你再次运行相同的脚本,但带有参数。 BAM 消失了。
只是为了完整性。 @Stevoisiak 的回答对于要求的目的已经很好了。?
【讨论】:
我也在寻找如何从另一个自动热键脚本中关闭一个特定的运行脚本,所以我尝试了 cristivaldo 的解决方案,但它对我来说不太有效,所以我对其进行了一些更改。
我添加了SetTitleMatchMode, 2,因此它将窗口标题与部分匹配项进行匹配,因此您不必完全输入完整的窗口标题(这样即使自动热键版本号更改,它仍然会匹配)。我还删除了路径和变量。
这是一个停止/关闭特定脚本的示例(只需将 examplescriptfile.ahk 更改为您希望停止的正在运行的自动热键脚本的文件名):
DetectHiddenWindows, On
SetTitleMatchMode, 2
WinClose, examplescriptfile.ahk
【讨论】:
1.转到 Windows 托盘
2.右键单击“H”标志
3.点击“暂停热键”或“退出”
这是停止自动热键脚本最简单、最简单的方法
但不要点击暂停脚本,否则重新映射的键将被关闭
另外,如果您暂停了热键,“H”将变为“S”
希望这有帮助。
【讨论】: