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

用法是这样的,,你试试

Win10 20H2原生输入法不支持 :face_exhaling:
能否通过读取输入法状态,显示在ahk生成的一个小gui窗口,再让这个窗口跟随鼠标?
AHK实现切换自由
使用 AHK 在 VS Code 中根据上下文自动切换输入法状态

试试这个,可能符合你需要
我这个方案主要针对能换皮肤的输入法,微软输入法就算能用,一大条悬浮框跟着箭头,也太丑了

用 aardio 简单写了一个,支持所有输入法,支持 XP 到 Win11 :
screenshots
当然可以简单地换成图标、动画等等。

源代码见 aardio 范例:
image

网上很多判断输入法状态的代码是错的,例如很多代码和教程都是判断IMC_GETCONVERSIONMODE 的返回值是否1,是否0,是否 1025,这样当然会时灵时不灵。

IMC_GETCONVERSIONMODE 的返回值要按位判断。
例如判断输入法中英状态,用 aardio 要这么写:
3 & key.ime.control(,1/*_IMC_GETCONVERSIONMODE*/)

再例如判断输入法是否开启中文标点,应当这样写:
0x400 & key.ime.control(,1/*_IMC_GETCONVERSIONMODE*/)

aardio 提供了一个更简单的函数:
var openState,mode = key.ime.state();
上面第一个返回值表示输入法是否打开,mode 为1 表示半角标点, mode 为 2 表示全角标点,mode 为 3 表示开启中文标点。

4 个赞

有没有办法以光标位基准来判断和显示呢?包括游戏内的支持

提出这个问题是因为,鼠标的指针并非时常在光标附近停留,尤其是游戏里,基本都是点击Enter进入输入模式,这时候鼠标指针大多数情况都不在光标附近。

autohotkey只能识别标准窗体的光标,最多再通过插件实现chrome类窗体。
要适配所以窗口光标你问问楼上有没有办法@jacen 。

::User32.GetGUIThreadInfo 或 MSAA 可以获取光标位置。
我已经把上面的程序改为跟随光标了,aardio 是这样写:

var caret = winex.getCaret() || winex.accObject.getCaret();
winform.imeState.setPos(caret.left+30,caret.top -30);

其他语言网上搜一下应当都有。

win11打字它会一直闪怎么办,还有卡顿怎么解决,希望作者能出个不卡顿的版本,看前面说会占用内存,但是我内存多没事

有打包好的吗,求分享

有没有exe

求分享EXE,谢谢

会闪可能是因为用的默认搜狗默认皮肤或者动态皮肤,换个普通的皮肤就好了。

你把这行数字改小,这段代码下载ahk运行试试還卡顿不。

破案了,输入法必须设定成非默认输入法才有效,否则权限太高,不能操纵。。。你试试

1 个赞

破案了,输入法必须设定成非默认输入法才有效,否则权限太高,不能操纵。。。你试试吧

破案了,输入法有时必须设定成非默认输入法才有效,否则权限太高,不能操纵。。。你试试bia

谢谢,可以跟随鼠标到处走了. 对了,刚刚在试的时候发现 还需要把微软输入 选项 里的兼容性开关打开.

破案了,输入法有时必须设定成非默认输入法才有效,否则权限太高,不能操纵。。。
你试试,win11应该也能用

win10和win11用一段时间就不能抓取了,win11是最新的测试版,win10是企业版

权限问题,一是给软件提升权限,以管理员运行,二是给输入法降权,设成非默认输入法

还需要把微软输入 选项 里的兼容性开关打开.

折腾一天了,好像还是不行,设置完要重启么