昨天在调试我的AutoHotkey脚本时,我意外地触发了无休止的MouseMove
和MouseClick
事件循环。每0.5秒我的鼠标会点击屏幕的随机部分。
在尝试使用任务管理器终止AHK失败后,我最终关闭了计算机以结束脚本。
如何停止有效的AutoHotkey脚本?
答案 0 :(得分:16)
结束活动脚本的最可靠方法是先发制人地包含紧急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 + 删除快速注销,然后按by 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
}
}
答案 1 :(得分:2)
你也可以让你的脚本 #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 的回答对于所要求的目的来说已经很好了。?
答案 2 :(得分:1)
如果您想在不进行循环的情况下关闭特定窗口,我创建了以下内容:
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:**文件名必须区分大小写。
答案 3 :(得分:1)
我也在寻找如何从另一个 autohotkey 脚本中关闭一个特定的运行脚本,所以我尝试了 cristivaldo 的解决方案,但它对我来说不太好用,所以我做了一些更改。
我添加了 SetTitleMatchMode, 2
以便它匹配具有部分匹配的窗口标题,因此您不必准确键入完整的窗口标题(这样即使自动热键版本号更改,它仍然会匹配)。我还删除了路径和变量。
以下是停止/关闭特定脚本的示例(只需将 examplescriptfile.ahk
更改为您希望停止的正在运行的自动热键脚本的文件名):
DetectHiddenWindows, On
SetTitleMatchMode, 2
WinClose, examplescriptfile.ahk
答案 4 :(得分:0)
如果您想花哨并从Windows命令提示符处停止它,
使用以下命令停止所有自动热键脚本:
taskkill /im "autohotkey.exe"
使用以下命令停止特定脚本:
wmic process where "commandline like '%%MyScript.ahk'" delete