YMMV、
SetCapsLockState, off ; may work with SetCapsLockState, AlwaysOff
+CapsLock:: ; Shift CapsLock toggles CapsLock state
if GetKeyState("CapsLock", "T") = 1
{
MsgBox CapsLock going off
SetCapsLockState, off
}
else if GetKeyState("CapsLock", "F") = 0
{
MsgBox CapsLock going on
SetCapsLockState, on
}
return
*CapsLock::
MsgBox CapsLock pressed without shift
Send, {ALTDOWN}{SHIFTDOWN}{SHIFTUP}{ALTUP}
return
とCapsLockキーのMsgBoxには、シフト+ CapsLockキー
HTHを押すことによってトリガされた場合、私たちは知ってみましょう参照:
SetCapsLockState, off
+Capslock::CapsLock
*Capslock::LangSwitch(1)
*Capslock up::LangSwitch(1)
LangSwitch(iKeyDownUp=0)
{
static tickLast
IfEqual,iKeyDownUp,1
{ tickLast=%A_TickCount%
return
}
IfEqual,iKeyDownUp,2
If(A_TickCount-tickLast>200)
return
HKL:=DllCall("GetKeyboardLayout", "uint",GetThreadOfWindow(), "uint")
HKLnum:=DllCall("GetKeyboardLayoutList","uint",0,"uint",0)
VarSetCapacity(HKLlist, HKLnum*4, 0)
DllCall("GetKeyboardLayoutList","uint",HKLnum,"uint",&HKLlist)
loop,%HKLnum%
{ if(NumGet(HKLlist, (A_Index-1)*4) = HKL)
{ HKL:=NumGet(HKLlist, mod(A_Index,HKLnum)*4)
break
}
}
ControlGetFocus,ctl,A
SendMessage,0x50,0,HKL,%ctl%,A ;WM_INPUTLANGCHANGEREQUEST
;show traytip
LOCALE_SENGLANGUAGE=0x1001
LOCALE_SENGCOUNTRY=0x1002
VarSetCapacity(sKbd, 260, 0)
VarSetCapacity(sCountry, 260, 0)
DllCall("GetLocaleInfo","uint",HKL>>16,"uint",LOCALE_SENGLANGUAGE, "str",sKbd, "uint",260)
DllCall("GetLocaleInfo","uint",HKL & 0xFFFF,"uint",LOCALE_SENGCOUNTRY, "str",sCountry, "uint",260)
traytip,%sKbd%,%sCountry%
SetTimer,REMOVE_TOOLTIP,500 ;0.5 second
return
REMOVE_TOOLTIP:
SetTimer,REMOVE_TOOLTIP,off
traytip
return
}
これを試してみてください
ありがとうございます。残念ながら、結果は同じです:私はそれを2〜3回押すまで、CapsLockは言語を切り替えることができないことがあります。 – shlema