2016-06-01 3 views
1

Windows 10でAHKを実行しているため、CapsLockを言語切り替えに使用することはできません。Alt + ShiftのショートカットがAHKで信頼性の低いものとして動作する

SetCapsLockState, AlwaysOff 
+CapsLock::CapsLock 

*CapsLock::Send, {ALTDOWN}{SHIFTDOWN}{SHIFTUP}{ALTUP} 

ショートカットが、それは一回ごとに3〜4回の言語を切り替えないだろうように、一種の不確実に動作し、またはこのような何か:

ここでは、スクリプトの関連部分です。

ここで問題が発生する可能性がありますか?

ありがとうございます!

SetCapsLockState, off ; may work with SetCapsLockState, AlwaysOff 
+CapsLock:: ; Shift CapsLock toggles CapsLock state 
    if GetKeyState("CapsLock", "T") = 1 
     SetCapsLockState, off 
    else if GetKeyState("CapsLock", "F") = 0 
     SetCapsLockState, on 
return 

*CapsLock::Send, {ALTDOWN}{SHIFTDOWN}{SHIFTUP}{ALTUP} 

EDIT:うーん

答えて

0

はそうのようにそれを試してみてください。私は最初に+CapsLockでトグルしていない問題を抱えていました。これは、インターネット上のどこかからである

+0

ありがとうございます。残念ながら、結果は同じです:私はそれを2〜3回押すまで、CapsLockは言語を切り替えることができないことがあります。 – shlema

-1

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 
} 
これを試してみてください

関連する問題