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