AutoIt终止HotKeySet无法正常工作

时间:2013-11-06 05:08:04

标签: path autoit hotkeys

非常简单,我正在尝试使用ESC键终止脚本,并且在运行Path()时它不会终止。我已经尝试将HotKeySet定义放在Path()函数中,但仍然无法正常工作。我是AutoIt的新手。

; Press Esc to terminate script, Pause/Break to "pause"
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
; Start Pathing
MsgBox(0,"Starting...","Will Start 2 seconds after you close this.")
Sleep(2000)
Path()


Func Path()
   Opt("SendKeyDownDelay", 500)
   $pathing = True
   $i = 0
   $j = 5 ; Only here to prevent an infinite loop because HotKeySet won't terminate on ESC
   While $i < $j
      Send("{A}")
      Send("{S}")
      Send("{W}")
      Send("{D}")
      $i = $i + 1
   WEnd
EndFunc

Func CheckForBattle()
   Return True
EndFunc

Func TogglePause()
    $Paused = Not $Paused
    While $Paused
        Sleep(100)
        ToolTip('Script is "Paused"', 0, 0)
    WEnd
    ToolTip("")
EndFunc   

Func Terminate()
    Exit 0
EndFunc  

Func ShowMessage()
    MsgBox(4096, "", "This is a message.")
EndFunc 

1 个答案:

答案 0 :(得分:2)

我想这是因为你要发送大写字母。这导致换档保持500ms。您必须在此期间按Shift键或设置另一个热键,如下所示:

; Press Esc to terminate script, Pause/Break to "pause"
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{ESC}", "Terminate")
HotKeySet("+{ESC}", "Terminate")
; Start Pathing
MsgBox(0, "Starting...", "Will Start 2 seconds after you close this.")
Sleep(2000)
Path()

Func Path()
    Opt("SendKeyDownDelay", 500)
    $pathing = True
    $i = 0
    $j = 5 ; Only here to prevent an infinite loop because HotKeySet won't terminate on ESC
    While $i < $j
        Send("A")
        Send("S")
        Send("W")
        Send("D")
        $i = $i + 1
    WEnd
EndFunc   ;==>Path

Func CheckForBattle()
    Return True
EndFunc   ;==>CheckForBattle

Func TogglePause()
    $Paused = Not $Paused
    While $Paused
        Sleep(100)
        ToolTip('Script is "Paused"', 0, 0)
    WEnd
    ToolTip("")
EndFunc   ;==>TogglePause

Func Terminate()
    Exit 0
EndFunc   ;==>Terminate

Func ShowMessage()
    MsgBox(4096, "", "This is a message.")
EndFunc   ;==>ShowMessage