键入时禁用快捷方式

时间:2012-10-06 17:44:57

标签: keyboard automation shortcut autohotkey

我使用以下AutoHotKey代码在Adobe Reader中显示“转到页面”对话框:

SetTitleMatchMode, 2

#ifWinActive Adobe Reader
    p:: Send ^+n
#ifWinActive

问题在于它阻止我在查找文本框中键入 P 键。如何在键入时禁用该快捷方式?

2 个答案:

答案 0 :(得分:2)

这将允许您在Acrobat Reader中按p并跳转到下一页。当您按^ f进行搜索时,按 p 将导致ap被发送,直到您按Enter键,这将按 p 行为再次发送^ N.

SetTitleMatchMode, 2 ; Put this line in the beginning of your script to allow flexible searching in the window title.

#ifWinActive Adobe Reader ; The following lines ONLY work inside Acrobat Reader.
    ~^f::ARSearchActive = 1 ; Let ^f go through to the O/S and set a variable.
    ~Enter::ARSearchActive = 0 ; Let Enter go through to the O/S and reset the variable.

    p:: ; Action to do when p is pressed
    If (ARSearchActive = 1) ; This is true AFTER you pressed ^f.
        Send, p ; If search has been activated, just send p
    else ; This is true after you pressed Enter.
        Send, ^+n ; If search is not activated, send ^N
    Return
#ifWinActive ; End of Adobe Reader specific portion.

我没有使用Acrobat Reader对此进行测试,因为我使用的是Foxit,但我使用记事本对其进行了测试,并按预期执行。

答案 1 :(得分:2)

这取决于您使用 Ctrl + F 打开搜索框,键入文本,然后按Enter键结束注释:

编辑基于OP评论的代码:

SetTitleMatchMode, 2

mode := "hotkey_mode"

#If, WinActive("Adobe Reader") && mode = "hotkey_mode"
    p:: Send ^+n

    ~^f::
        Hotkey If, WinActive("Adobe Reader") && mode = "hotkey_mode"
        Hotkey p, off
    return

    ~Enter::
    ~Esc::
        Hotkey IfWinActive, Adobe Reader
        Hotkey p, on
    return

    ^t::mode := "typing_mode"   

#If, WinActive("Adobe Reader") && mode = "typing_mode"
    ^t::mode := "hotkey_mode" 
#If

我添加了 ESC 热键来执行与 Enter 相同的操作,因为您可以使用 ESC 退出查找对话框。此外,在我的Adobe Reader版本中,按 Enter 也可用作查找下一个的快捷方式,所以如果我是你,我会禁用 Enter 热键并仅使用 ESC 来转义查找对话框。

最后,一般提示:通常更容易使用 Ctrl + P 等热键而不仅仅是 p 来避免这些并发症。实际上,如果你不使用 Ctrl + P 触发器的打印命令,你可以考虑使用 Ctrl + P 而不是 p 作为你的热键(或者即使你打印,但很少,因为你仍然可以从菜单中访问打印命令)