[更新见122楼,修bug,不再有卡顿感]一个最简单,最美观的,用鼠标箭头表征输入法状态的方案!

我记得之前我分享过一个类似的. 也是别人写的. 不是用皮肤. 可能更适合动态皮肤或不想换皮肤的人.

这个AHK还有一个支持 微软拼音输入法的版本.

源码和编译好的EXE

;功能:中、英、大小写输入状态提示
;环境:win10+搜狗输入法正式版,输入法状态切换用默认的shift键。
;作者:傲慢与偏见zxc, [email protected]
;时间:20211227
 
; 按下 Shift 键切换输入法
; EN-英文, CN-中文, A-Caps On
CN := chr(20013)
EN := chr(33521)
 
~CapsLock::
{
    If GetKeyState("CapsLock","T")
        ToolTip, Caps_On
    Else
        ToolTip, Caps_Off
    SetTimer, RemoveToolTip, -1000
    return
}
 
Shift::
{
    mainAction("A", EN, CN)
    return
}
 
 ; 鼠标左键按下,且为工形图标,判定为文本输入模式
~LButton::
{
    mainAction("A", CN, EN)
    return
}
 
; 按下Ctrl键查询当前状态
~Ctrl::
{
    mainAction("A", CN, EN)
    return
}
 
mainAction(p_caps, p_status1, p_status2)
{
    If  (A_Cursor = "IBeam") 
    {
        If (IME_GET()=1)
        {       
            If GetKeyState("CapsLock","T")
                ToolTip, %p_caps%
            Else
                ToolTip, %p_status1%
        }
        else
        {       
            If GetKeyState("CapsLock","T")
                ToolTip, %p_caps%
            Else
                ToolTip, %p_status2%
        }
    }
    SetTimer, RemoveToolTip, -1000
}
 
RemoveToolTip:
ToolTip
return
 
IME_GET(WinTitle="")
;-----------------------------------------------------------
; “获得 Input Method Editors 的状态”
;-----------------------------------------------------------
{
    ifEqual WinTitle,,  SetEnv,WinTitle,A
    WinGet,hWnd,ID,%WinTitle%
    DefaultIMEWnd := DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint)
 
    DetectSave := A_DetectHiddenWindows
    DetectHiddenWindows,ON
    SendMessage 0x283, 0x005,0,,ahk_id %DefaultIMEWnd%
    DetectHiddenWindows,%DetectSave%
    Return ErrorLevel
}
2 个赞