0

我的全部目标是能够按住Capslock + s,这会将按键转换uiojklm,.为像 10 键数字键盘一样工作。

所以作为第一步,我试图映射Capslock + s + m到数字1

SetCapslockState AlwaysOff

Capslock & s::
keywait, m, d, t0.6
If (!ErrorLevel) {
    SendInput {1}
} Return

我将我当前的代码基于此处的答案:Alt + Space + key in autohotkey

当我按下Capslock + s + m时,它会打印出来m1。如何停止m打印?

4

1 回答 1

1

这是一个替代解决方案。你必须有 AutoHotKey_L 才能工作,因为传统的 AutoHotKey 不支持#if。

CapsLock & s::
Flag:=!Flag
If (Flag)
    TrayTip, AutoHotKey, Numpad ON, 1
Else
    TrayTip, AutoHotKey, Numpad OFF, 1
Return

#If (Flag)
    m::Send, 0
    k::Send, 1
#If

在第一个块中,您使用 CapsLock + s 将标志切换为 True/False,并使用托盘提示显示状态,然后在下一个块中定义某些键的行为。或者,您可以删除第一个块并将 #if (Flag) 行替换为:

#If (GetKeyState("CapsLock", "P") and GetKeyState("s", "P"))

更新:

尝试了以下不同的结果。第一个(注释掉的)代码确实使用 CapsLock + s,但显然按下 s 键会阻止 AutoHotKey 看到某些其他按键(这里的字母 n、m、i、o、p 有效,但 j、k、l 处于打开状态未检测到键盘上相同的高度/扫描线)

SetCapsLockState, alwaysoff

/*
Capslock & s::
While, (GetKeyState("CapsLock", "P") and GetKeyState("s", "P"))
{
    Input, MyKey, I L1 T0.5
    TrayTip, Key:, %MyKey%
    if (MyKey = "m")
        Send, 1
    if (MyKey = "i")
        Send, 2
    if (MyKey = "k")
        Send, 3
    if (MyKey = "j")
        Send, 4
    if (MyKey = "o")
        Send, 5
    if (MyKey = "p")
        Send, 6
}
Return
*/

仅使用 CapsLock(也与 j,k,l 一样)有效,但这不是您想要的。

Capslock::
While, (GetKeyState("CapsLock", "P"))
{
    Input, MyKey, I L1 T0.5
    TrayTip, Key:, %MyKey%
    if (MyKey = "m")
        Send, 1
    if (MyKey = "i")
        Send, 2
    if (MyKey = "k")
        Send, 3
    if (MyKey = "j")
        Send, 4
    if (MyKey = "o")
        Send, 5
    if (MyKey = "p")
        Send, 6
}
Return
于 2012-12-17T09:51:41.323 回答