如何停止正在运行的AutoHotkey脚本?

51

昨天在调试我的AutoHotkey脚本时,我意外触发了一个MouseMoveMouseClick事件的无限循环。每0.5秒钟,我的鼠标会点击屏幕上的随机部分。

在尝试使用任务管理器终止AHK失败后,最终关闭了电脑来结束脚本。

如何停止正在运行的AutoHotkey脚本?

8个回答

69

添加紧急退出热键

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

Esc::ExitApp  ; Exit script with Escape key

您还可以设置暂停, 挂起, 或 重新加载 您的脚本热键。

^!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 图标并选择 "退出" 来结束脚本。

Exit script from taskbar

使用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
  }
}

13

如果你想让它更花哨并停止Windows命令提示符中的自动热键脚本,请使用以下命令停止所有自动热键脚本:

taskkill /im "autohotkey.exe"

使用以下代码停止特定的脚本:

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

截至Windows 10 21H1版本,WMIC已被弃用,因此以下PowerShell脚本将执行相应操作:

Get-WmiObject win32_process -Filter "commandline like '%%MyScript.ahk""'" |
    ForEach-Object { $_.Terminate() }

1
我非常有兴趣让它正常工作。我正在尝试使用一个 .bat 脚本停止一个 ahk 脚本的运行,但是你提供的例子 "Stop specific script with" 似乎不起作用。 - Kalamalka Kid
问题是我不想停止所有脚本,我只想停止某个特定的脚本。 - Kalamalka Kid
1
好的,无论你的脚本叫什么,都将其放在单引号之间的字符串中,包括百分号。在我的示例中用你的脚本名称替换MyScript。 - PBeezy
1
示例代码在我的答案中。wmic process where "commandline like '%%MyScript.ahk'" delete 如果它无法正常工作,可能是其他问题,比如批处理文件无法正常工作,权限问题或其他问题。我建议您寻求朋友、老板或老师的帮助。 - PBeezy
谢谢。快速问题...这段代码中的删除部分是删除文件还是仅停止进程运行? - Kalamalka Kid
显示剩余2条评论

2
如果你想关闭一个特定的窗口而不需要循环,我已经创建了以下代码:
```javascript window.close(); ```
这行代码会立即关闭当前窗口。
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:文件名必须区分大小写。


创建一个新的 AHK 脚本... 不要将它添加到以前的 AHK 脚本中。 - cristivaldo

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
}

所以你再次运行相同的脚本,但加上参数。然后就完成了。

只是为了完整起见,@Stevoisiak的答案已经非常适合所需的目的。


1

1.前往Windows托盘
2.右键单击"H"标志
3.单击"暂停热键"或"退出"

这是停止AutoHotkey脚本最简单的方法

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

此外,如果您已经暂停了热键,"H"将变成"S"

希望这有所帮助。


这对我作为一个初学者真的很有帮助! - mukesh.kumar

1
我也在寻找如何从另一个autohotkey脚本中关闭一个特定的正在运行的脚本,所以我尝试了cristivaldo的解决方案,但对我来说不太有效,所以我稍微改变了一下。
我添加了SetTitleMatchMode, 2,以便匹配部分匹配的窗口标题,这样您就不必完全输入窗口标题(即使autohotkey版本号更改,它仍将匹配)。我还删除了路径和变量。
以下是停止/关闭特定脚本的示例(只需将examplescriptfile.ahk更改为要停止的正在运行的autohotkey脚本的文件名):
DetectHiddenWindows, On
SetTitleMatchMode, 2

WinClose, examplescriptfile.ahk

0

如果你在AutoHotkey脚本中意外触发了MouseMove和MouseClick事件的无限循环,不要担心,因为有几种方法可以停止这个恶意脚本。以下是如何在Windows操作系统上使用任务管理器进行操作:

步骤1:首先,按顺序按下Ctrl+Alt+Del键以调用Windows安全屏幕。

步骤2:一旦出现Windows安全屏幕,请选择“任务管理器”选项,但请注意,此操作可能需要几秒钟来加载。所以,请耐心等待。

步骤3:接下来,注意任务栏中在任务管理器图标之前出现的图标数量。假设在任务管理器图标之前有五个图标,则任务栏数字为任务管理器图标的6(5 + 1)。

步骤4:现在,按下Windows+Ctrl+(任务管理器图标任务栏数字)将任务管理器带到显示器的最前面。例如,如果任务管理器图标是任务栏中的第六个图标,则按下Windows+Ctrl+6。

步骤5:要将任务管理器窗口作为活动应用程序,您需要快速行动并快速单击它;否则,您将再次失去对计算机的控制。一旦它处于活动状态,您应该能够重新掌控系统。

步骤6:在任务管理器中搜索AutoHotkey进程时,请记住它通常位于“进程”或“详细信息”选项卡下,并且可能被称为“AutoHotkey.exe”或“AutoHotkey Unicode 64位”。如果您无法找到它,请尝试按名称或CPU使用率对列表进行排序,最终您会偶然发现它。

步骤7:在最后一步中,右键单击AutoHotkey进程并选择“结束任务”选项以终止脚本。

为确保将来不会出现此问题,请采取措施通过将保障措施纳入代码并在运行之前彻底测试脚本来防止无限循环。您还可以考虑向脚本添加热键,以便在出现问题时轻松终止它们。例如,您可以使用“Esc”键或自定义热键退出脚本。

我希望这个问题能够得到解决,我也明白这些说明可能比之前那个错误标记和删除的答案更难理解,但是通过明确地让文本变得更难理解,可以降低虚假的人工智能生成标记的概率。


0

我认为你也可以做CTRL+ALT+DEL


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接