轻松区分中文输入法和英文大写、英文小写状态

什么是输入法状态?

输入法状态指的是你当前使用的输入法类型和模式。常见的输入法状态包括:

  • 中文输入法:用来输入中文字符,如拼音输入法、五笔输入法等。
  • 英文输入法:用于输入英文字符或数字,通常是键盘上的直接输入模式。
  • 大写和小写状态:在英文输入模式下,通常可以切换大写(Caps Lock)和小写状态。

为什么要显示输入法状态?

显示输入法状态能够帮助用户清楚地知道自己当前的输入方式。例如,当用户在输入中文时,知道自己处于拼音模式,或者知道输入是否处于大写字母状态,避免错误输入。


光标和光标图标

什么是光标?

光标(或光标指针)是显示在计算机屏幕上的一个标记,用于指示当前用户可以输入的文本位置。它通常是一个闪烁的竖线或条形,位于你想要插入文本的位置。

如何通过光标显示输入状态?

光标不仅仅表示文本插入位置,它的形态也可以用来表示输入状态。例如:

  • 改变光标的形态:可以通过修改光标的图标(比如,光标图标变为“中文输入”图标或“英文输入”图标)来指示当前的输入状态。
  • 通过光标颜色或形状的变化:有些脚本或程序通过修改光标颜色或形状来区分不同的输入法状态。例如,当用户在中文输入法下时,光标可能变为一个汉字输入指示符,显示英文输入时,光标可能变为一个标准的文本输入指针。

 

 

包含光标图标文件打包下载:

; 方便区分中文输入法和英文大写、英文小写状态
#NoEnv
SetBatchLines -1
SetWorkingDir %A_ScriptDir%

SetTimer 中文光标判断, 200
Return

; 光标指针文件显示效果可自行修改

中文光标判断:
if !GetKeyState("CapsLock", "T")
  if (IME_GET()!=光标状态缓存)
    if IME_GET()
      DllCall("SystemParametersInfo", "Uint", SPI_SETCURSORS := 0x57, "Uint", 0, "Ptr", 0, "Uint", 0)
      , 光标状态缓存=1
     else
      英文光标 := DllCall( "LoadCursorFromFile", "Str", "C:\Windows\Cursors\beam_r.cur") ; beam_i.cur为黑色边缘
      , DllCall("SetSystemCursor", "Uint", 英文光标, "Int", 32513)
      , 光标状态缓存=0
; TaskBar_SetAttr()  ; 托盘任务栏透明
Return


; 按CapsLock大小写时,鼠标光标同步切换来提示状态
CapsLock::
SetCapsLockState % !GetKeyState("CapsLock", "T")
if GetKeyState("CapsLock", "T")
  大写光标 := DllCall( "LoadCursorFromFile", "Str", A_ScriptDir "\小写光标beam_i.cur")
  , DllCall("SetSystemCursor", "Uint", 大写光标, "Int", 32513)
 else
  if IME_GET()
    DllCall("SystemParametersInfo", "Uint", SPI_SETCURSORS := 0x57, "Uint", 0, "Ptr", 0, "Uint", 0)
   else
    英文光标 := DllCall( "LoadCursorFromFile", "Str", "C:\Windows\Cursors\beam_r.cur") ; beam_i.cur为黑色边缘
    , DllCall("SetSystemCursor", "Uint", 英文光标, "Int", 32513)
KeyWait CapsLock
Return


; 输入法状态判断
IME_GET() {
  DefaultIMEWnd := DllCall("imm32\ImmGetDefaultIMEWnd", "Uint", WinActive("A"), "Uint")
  DetectHiddenWindows % ("On", DHW:=A_DetectHiddenWindows)
  SendMessage 0x283, 0x005, 0,, ahk_id %DefaultIMEWnd%
  DetectHiddenWindows %DHW%
  Return ErrorLevel
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。