如何停止活动的AutoHotkey脚本?

时间:2017-08-15 19:45:07

标签: autohotkey

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

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

如何停止有效的AutoHotkey脚本?

5 个答案:

答案 0 :(得分:16)

添加紧急退出热键

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

Esc::ExitApp  ; Exit script with Escape key

您还可以将热键设置为脚本的pausesuspendreload

^!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图标并选择"退出"

来结束脚本。

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

答案 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