【问题标题】:Capslock + s + m in AutoHotKeyAutoHotKey 中的 Capslock + s + m
【发布时间】:2012-12-14 23:10:02
【问题描述】:

我的全部目标是能够按住 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 打印?

【问题讨论】:

    标签: autohotkey


    【解决方案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
    

    【讨论】:

    • 哎呀,刚刚用#If (GetKeyState("CapsLock", "P") 和 GetKeyState("s", "P")) 测试了我建议的替代方案,但它不能正常工作(然而)。
    • 这与我正在寻找的内容很接近,但我希望 Numpad 功能仅在 Capslock & s 被按住时才起作用。 (您的示例是切换)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    相关资源
    最近更新 更多