按住按钮+按下另一个宏

时间:2015-10-04 21:31:28

标签: autohotkey

我已经习惯了Mac笔记本电脑上的VI风格导航,每次我需要在家中切换到我的Windows机器时,我都很讨厌。在我发现“Autohotkey”之前,我感到很痛苦。它非常强大。但是,我仍然无法通过Karabiner找出OS X中的一件事。

“HJLK”导航带有“s”按钮。所以我会按住s并按住h按住它 - 光标向左移动,j - 它会下降,等等。

我能用Autohotkey这样的东西吗?我知道可能使用CtrlAlt,但我希望s按钮充当“特殊”按钮。还要记住,它必须是“导航” - 你不应该让s去切换方向。在按住jjj的同时按h,然后按s,应将光标向下移动三次,向左移动一次。

2 个答案:

答案 0 :(得分:0)

您可以使用apersand符号组合两个键。 Documentation说:

  

&安培;可以在任意两个键或鼠标按钮之间使用&符号将它们组合成自定义热键。

s & h::
    send {left}
return
s & j::send {down}
s & k::send {right}
s & i::send {up}

应该

如果您想切换上述热键的效果,可以使用Hotkey命令(link)定义它们,或者更轻松地使用context-sensitive hotkeys:< / p>

^t:: ; your toggle hotkey
    navigation_keys_active := ! navigation_keys_active ; toggle
return

#if navigation_keys_active
s & h::send {left}
; ... etc
#if

此外,如果您不想完全覆盖原始密钥功能,则can use the ~ tilde operator instead.

  

当热键触发时,其键的本机功能将不会被阻止(从系统中隐藏)。

答案 1 :(得分:0)

也许是这样的?

$i::HkHelperFunc("s", "{Up}", "i")
$h::HkHelperFunc("s", "{Left}", "h")
$j::HkHelperFunc("s", "{Down}", "j")
$k::HkHelperFunc("s", "{Right}", "k")

HkHelperFunc(key, keyIfKeyDown, keyIfKeyUp) {
    If GetKeyState(key)
        SendInput, {BS}%keyIfKeyDown%
    Else
        SendInput, %keyIfKeyUp%
}

或者,也许有点清洁,因为不必删除任何字符:

$s::  
    sDown := True
    Input, L, L1 T0.3
    If (sDown && (L = "I" || L = "H" || L = "J" || L = "L"))
        traytip ;do nothing
    Else If (ErrorLevel != "Timeout")
        SendInput, s%L%
Return

$s UP::
    sDown := False
Return

#If sDown
i::SendInput, {Up}
h::SendInput, {Left}
j::SendInput, {Down}
k::SendInput, {Right}