これが代替ソリューションです。従来の AutoHotKey は #if をサポートしていないため、これを機能させるには AutoHotKey_L が必要です。
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 (フラグ) 行を次のように置き換えることもできます。
#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