前言
更新于2021年12月27日,有不少朋友在使用微软拼音,因此最近两天研究了一下,并放出测试版本,同时优化了一下搜狗拼音的版本。希望大家帮忙测试并给出建议,谢谢。
可到我的GitHub下载编译好的exe文件 GitHub。
将exe文件创建快捷方式,并放在以下目录中便可以开机自启。
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
1. 适用于搜狗输入法正式版(需要使用AutoHotkey v1版本)
;功能:中、英、大小写输入状态提示
;环境:win10+搜狗输入法正式版,输入法状态切换用默认的shift键。
;作者:傲慢与偏见zxc
;时间: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. 适用于微软拼音(需要使用AutoHotkey v2版本)
(在vscode,notepad++,记事本之间切换会报错,暂未解决,还是建议使用搜狗版本)
;功能:中、英、大小写输入状态提示
;环境:win10+微软拼音,输入法状态切换用默认的shift键。
;作者:傲慢与偏见zxc
;时间:20211227
; 按下 Shift 键切换输入法
DetectHiddenWindows True
~CapsLock::
{
If GetKeyState("CapsLock","T")
{
ToolTip "Caps_On"
}
Else
{
ToolTip "Caps_Off"
}
SetTimer () => ToolTip(), -1000
return
}
Shift::
{
ToolTip
mainAction("A", "英", "中")
return
}
; 鼠标左键按下,且为工形图标,判定为文本输入模式
~LButton::
{
If (A_Cursor = "IBeam")
{
mainAction("A", "中", "英")
}
return
}
; 按下Ctrl键查询当前状态(只在工形图标下生效,如果想全局生效,可以把判断条件去掉)
~Ctrl::
{
If (A_Cursor = "IBeam")
{
mainAction("A", "中", "英")
}
return
}
mainAction(p_caps, p_status1, p_status2){
If (!isEnglishMode())
{
If GetKeyState("CapsLock","T")
{
ToolTip p_caps
}
Else
{
ToolTip p_status1
}
}
else
{
If GetKeyState("CapsLock","T")
ToolTip p_caps
Else
ToolTip p_status2
}
SetTimer () => ToolTip(), -1000
}
; 可以用于判断微软拼音是否是英文模式
isEnglishMode(){
hWnd := winGetID("A")
result := SendMessage(
0x283, ; Message : WM_IME_CONTROL
0x001, ; wParam : IMC_GETCONVERSIONMODE
0, ; lParam : (NoArgs)
, ; Control : (Window)
; 获取当前输入法的模式
; Retrieves the default window handle to the IME class.
"ahk_id " DllCall("imm32\ImmGetDefaultIMEWnd", "Uint", hWnd, "Uint")
)
; DetectHiddenWindows Fasle
; 返回值是0表示是英文模式,其他值表明是中文模式
return result == 0
}