How do I stop an active AutoHotkey script?

余生颓废 提交于 2020-08-21 05:57:12

问题


Yesterday while debugging my AutoHotkey script, I accidentally triggered an endless loop of MouseMove and MouseClick events. Every 0.5 seconds my mouse would click random parts of the screen.

After unsuccessfully trying to terminate AHK with the task manager, I ended up turning off my computer to end the script.

How can I stop an active AutoHotkey script?


回答1:


Add an emergency exit hotkey

The most reliable method of ending an active script is to pre-emptively include an emergency ExitApp hotkey. A common practice is to place the following at the bottom of any script.

Esc::ExitApp  ; Exit script with Escape key

You can also set hotkeys to pause, suspend, or reload your script.

^!p::Pause    ; Pause script with Ctrl+Alt+P
^!s::Suspend  ; Suspend script with Ctrl+Alt+S
^!r::Reload   ; Reload script with Ctrl+Alt+R

Log off

On Windows 10/8/7/Vista, you can quickly log off with the keyboard shortcut Ctrl+Alt+Delete, followed by Alt+L.

This is because pressing Ctrl+Alt+Delete opens a special window which cannot be manipulated by programs like AutoHotkey.

End with taskbar icon

If you have control of the keyboard and mouse, you can end the script by right-clicking AutoHotkey's green H icon in the taskbar and selecting "Exit"

End all active scripts with AHKPanic()

For a more generic solution, AHK user None wrote AHKPanic(), a method which can pause, suspend, or kill all other running scripts. (Optionally ends the script that called it)

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



回答2:


If you want to get fancy and stop it from the Windows command prompt,

Stop all autohotkey scripts with:

taskkill /im "autohotkey.exe"

Stop specific script with:

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



回答3:


If you want to close a specific window without doing a loop, I have created the following:

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%

**NOTE 1 : ** the file name + " - AutoHotKey blah blah blah" (This is the window name for hot key when you open the window hidden on your bottom right corner close to the clock)

**NOTE 2 : ** the file names have to be case sensitivity.



来源:https://stackoverflow.com/questions/45700383/how-do-i-stop-an-active-autohotkey-script

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!