AutoHotKey中的Capslock + s + m

时间:2012-12-14 23:10:02

标签: autohotkey

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

1 个答案:

答案 0 :(得分: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,然后使用traytip显示状态,然后在下一个块中定义某些键的行为。或者,您可以删除第一个块并将#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