AHK宏仅在使用重映射控制时执行一次 - 在使用普通控制键时始终执行

时间:2014-06-30 17:09:04

标签: macros autohotkey remap

我有一些通过AutoHotkey使用的键映射和宏。 我已经重新控制了封锁,我制作了一个宏,让我按^,为家和^。为了结束。如果我按下大写字母和','或','这样就可以了。一旦。但如果我继续按住大写字母然后按“,”或“。”再次它只是插入角色。当我按住实际大写锁定键时,我得到预期的行为。

我在这个问题中尝试了答案中的建议:Autohotkey, issue after mapping capslock::ctrl 这是有效的 - 除了它改变从行的开始/结束到文件的开始/结束的行为。

这是我的代码:

^,::Send, {Home}
^.::Send, {End}
Capslock::Ctrl

2 个答案:

答案 0 :(得分:1)

CapsLock 直接映射到键时,有许多可能的复杂情况。我建议你按住 CapsLock 时设置变量的路线。以下是我建议你为AutoHotkey_L做的事情。

global capDown = 0

CapsLock::
    capDown = 1
return

CapsLock up::
    capDown = 0
return


#If capDown
    *h::CapsNav("Left")
    *j::CapsNav("Down")
    *k::CapsNav("Up")
    *l::CapsNav("Right")

    *,::CapsNav("Home")
    *.::CapsNav("End")

    *n::CapsNav("Home", "^")
    *p::CapsNav("End", "^")

    *a::Send ^a ; add as needed



CapsNav(action, initmod = "", mod = "+")
{
    If ! GetKeyState("alt")
        Send % initmod "{" action "}"
    Else
        Send % mod . initmod "{" action "}"
    SetCapsLockState, AlwaysOff
}

对于最新版本的AutoHotkey,请移除global并将#If capDown更改为if (capDown)

包含的功能还允许按住 Alt 以在移动时选择文本。它还允许使用诸如 Ctrl 之类的修饰符。

如果您将 CapsLock 用于其他组合键,您还需要添加所有这些组合。希望这会有所帮助。

答案 1 :(得分:0)

不确定为什么会出现这种情况。

我试过这个测试,并且在Ctrl或CapsLock一直按下的情况下它可以正常工作多次。

Capslock::Ctrl
^,::SoundBeep, 300, 500
^.::SoundBeep, 1000, 500