获取输入法状态的正确方法,支持所有输入法

我需要的是能提示全半角,中英,中英标点,大小写 …… 改变光标并不方便。

提示窗口并不会对输入候选词造成干涉,因为是显示在不同位置,
现在默认只有切换输入法状态显示几秒,更加不可能干涉。

image

等 EXE 直接拿来用得版本

更新了也是不显示。同时在win11设置/商店里的搜索栏也没显示。是不支持uwp之类的吗?

高分屏怎么适配的,我一注释掉这行就不适配了 winform.show();

winform.show() 能自动适配高分屏,
没有这句的话要调用 winform.enableDpiScaling(“init”)
不过你不用改了,我已经修改了 key.ime.stateBar 自动处理了这个问题,你更新一下就可以了。

UWP 窗口取不到输入光标,暂时不支持,如果需要的话只能显示在鼠标位置,如果只在切换输入状态显示几秒,估计影响也不大。

楼主能不能先放出一个exe测试一下呢,谢谢!

谢谢,主要是这个aardio总是被ESET误报,烦的很,就想用现成的exe。
我试着按教程编译了exe,感觉很多窗口都没问题,但在微信PC窗口怎么永远是显示“en半角”呢,完全无视输入状态的变化。

补充:好像在一些验证码的输入框也是状态无效

非常感谢你反馈的信息,不过对 aardio 的误报真的很罕见,
360、Defender、卡巴斯基这些都从未误报过 aardio 。

刚才查了一下 ESET 确实对 aardio 有误报( 记得之前曾经有提交过似乎没起作用 ),
非常抱歉因 ESET 的误报给你带来了不必要的麻烦,后面我们一定努力改进和优化这个问题。

我发布软件,一般都会经过 Defender ,卡巴斯基 …… 这些检测安全,这些厂商处理误报也很负责,都可以在线提交,清除误报的速度也很快。关于这个问题,请参考我写的文章 《发布软件常见问题与误报提交大全》

关于:微信 PC 窗口永远显示 “En 半角”,其他窗口正常。
这边测试暂时没有出现你所说的问题,我测试了微信的搜索框、聊天输入框都是正常的。后续我再多做一些测试找找原因。

如你所述,这个功能在多数窗口都是正常的,但是有少数特殊窗口无效(例如 UWP 窗口),这是因为有些特殊窗口并不提供输入光标位置。一个解决方案是对于这些窗口像其他工具那样显示在鼠标指针的位置 —— 但这样又会带来更多的问题(例如无法区分窗口是否需要输入)。所以目前的选择是暂时忽略这些窗口。

谢谢,我也是从WubiLex开始认识aardio的。ESET的误报我也给提交过几次误报了,但都没反馈。可能你们开发者去沟通更容易一些吧。

感谢,我重新向 ESET 提交了一下误报反馈,不一定有用。
ESET 高级设置里应当可以添加「排除」检测的信任路径,请放心只要是我们提供的原版文件绝对是安全的,发布前都会提交Defender、卡巴斯基 …… 这些通过检测。

:joy:我发布了,是有一个窗口能检测,但是别的窗口不行,应该怎么操作才能适配所有窗口

正常情况下应当不会这样。
1、系统环境?
2、你用的什么输入法?
3、什么窗口支持,不支持的又是哪些窗口?

电脑休眠唤醒后,收到以下错误提示:
image

请指教是什么情况。谢谢。

感谢反馈,新版已修正,更新一下就可以了。

爱了,爱了,终于找到组织了

目前现在要不是在切换输入法时显示固定秒数,要么是一直显示状态(但位置偶尔不太懂事),能不能增加一种显示方式,侦测到输入框时显示,无输入框时不显示或靠边显示之类呢?谢谢

感谢反馈!
有少数窗口返回输入光标位置确实有瑕疵,
例如 Chrome 返回输入光标位置虽然位置是正确的,但输入框失去焦点时仍然会返回输入框内光标位置 —— 这导致输入状态可能不会隐藏。如果你还遇到其他不太「懂事」的窗口,请告知具体程序与窗口,能优化的这边尽量优化。

至于切换输入法显示 —— 这个前提也是要能检测到输入框,这两个条件并不冲突。

能否中文和英文背景色不同、字体颜色也不同,这样更好分辩一些

更新到最新版,中英文两个样子都还是篮色的,不知道哪里没改好,导出为exe了。

image

点这里更新,要自己添加一下样式( 范例里样式注释掉了,默认不生效),如下:

//显示输入状态栏
import key.ime.stateBar;
imeBar = key.ime.stateBar(winform);

//中英状态显示不同颜色
imeBar.openStyle = {
	//中文模式样式
	[true] = {
		background = 0xE500CAF0; //背景色
		argbColor = 0xFFFF0000; //中英文本色
		iconColor = 0xFFFF0000; //符号颜色
	};
	//英文模式样式
	[false] = {
		background = 0xE5A6CA00; //背景色
		argbColor = 0xFF0000FF; //中英文本色
		iconColor = 0xFF0000FF; //符号颜色
	};
}

//重绘
imeBar.predraw();