如何停止活动的 AutoHotkey 脚本?

How do I stop an active AutoHotkey script?

昨天在调试我的 AutoHotkey 脚本时,我不小心触发了 MouseMoveMouseClick 事件的无限循环。我的鼠标每 0.5 秒就会点击屏幕的随机部分。

在尝试使用任务管理器终止 AHK 失败后,我最终关闭了计算机以结束脚本。

如何停止活动的 AutoHotkey 脚本?

添加紧急出口热键

结束活动脚本最可靠的方法是预先包含紧急 ExitApp 热键。通常的做法是将以下内容放在任何脚本的底部。

Esc::ExitApp  ; Exit script with Escape key

您还可以将热键设置为 pause, suspend, or 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[=46= 快速注销]+Delete,接着是Alt+L.

这是因为按 Ctrl+Alt+Delete 会打开一个特殊的 window,它不能被 AutoHotkey 等程序操作。

以任务栏图标结束

如果您可以控制键盘和鼠标,可以通过右键单击任务栏中 AutoHotkey 的绿色 H 图标并选择 "Exit"

来结束脚本

使用 AHKPanic() 结束所有活动脚本

对于更通用的解决方案,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
  }
}

如果你想关闭特定的 window 而不做循环,我创建了以下内容:

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”(这是当您打开隐藏在右下角的 window 时热键的 window 名称靠近时钟的角落)

**注意 2:**文件名必须区分大小写。

如果您想从 Windows 命令提示符中停止它,

停止所有自动热键脚本:

taskkill /im "autohotkey.exe"

停止特定脚本:

wmic process where "commandline like '%%MyScript.ahk'" delete

您也可以编写脚本 #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 的回答已经很好地满足了要求的目的。

我也在寻找如何从另一个 autohotkey 脚本关闭一个特定的 运行 脚本,所以我尝试了 cristivaldo 的解决方案,但它对我来说不太有效,所以我稍微改变了它。

我添加了 SetTitleMatchMode, 2 所以它匹配 window 部分匹配的标题,所以你不必完全输入完整的 window 标题(这样它仍然会匹配甚至如果自动热键版本号发生变化)。我还删除了路径和变量。

这里有一个 stop/close 特定脚本的示例(只需将 examplescriptfile.ahk 更改为您希望停止的 运行 autohotkey 脚本的文件名):

DetectHiddenWindows, On
SetTitleMatchMode, 2

WinClose, examplescriptfile.ahk

1.go 到 windows 托盘
2.right-click在“H”标志上
3.click 关于“暂停热键”或“退出”

这是停止自动热键脚本最简单最简单的方法

但不要点击暂停脚本,否则重新映射的键将被关闭

此外,如果您暂停了热键,“H”将变为“S”

希望对您有所帮助。

我想你也可以按 CTRL+ALT+DEL