重新映射而不递归

时间:2017-12-14 07:30:52

标签: autoit

我是AutoIt的新手,之前(很多)使用AutoHotkey工作。

这是我尝试从AutoIt文档略微重写其中一个脚本。我唯一改变的部分是底部(Tab键)。

我想要实现的目标:如果当前窗口是记事本,则发送Ctrl-Tab而不是Tab。否则,发送正常的标签。

嗯,我理解,为什么这段代码会导致递归,但我怎么能避免它?

#include <MsgBoxConstants.au3>

; Press Esc to terminate script, Pause/Break to "pause"

Global $g_bPaused = False

HotKeySet("{PAUSE}", "HotKeyPressed")
HotKeySet("{ESC}", "HotKeyPressed")
HotKeySet("{TAB}", "HotKeyPressed")

While 1
    Sleep(100)
WEnd

Func HotKeyPressed()
    Switch @HotKeyPressed
        Case "{PAUSE}"
            $g_bPaused = Not $g_bPaused
            While $g_bPaused
                Sleep(100)
                ToolTip('Script is "Paused"', 0, 0)
            WEnd
            ToolTip("")

        Case "{ESC}"
            Exit

        Case "{TAB}"
            If WinActive("[CLASS:Notepad]") Then
                Send("^{TAB}")
            Else
                Send("{TAB}")
            EndIf

    EndSwitch
EndFunc

1 个答案:

答案 0 :(得分:1)

暂时禁用热键:

Case "{TAB}"
    HotKeySet("{TAB}")  ;Cancel (or unregister) the hotkey
    If WinActive("[CLASS:Notepad]") Then
        Send("^{TAB}")
    Else
        Send("{TAB}")
    EndIf
    HotKeySet("{TAB}", "HotKeyPressed") ;re-enable hotkey
EndSwitch