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

screenshots

怎么隐藏掉这个窗口,只保留提示?

感谢反馈,

IMC_GETCONVERSIONMODE 的规则在微软官网有说明,理论上输入法都会支持。我测试过的输入法都能正确回复所有输入法状态。例如搜狗输入法、微软拼音、微软五笔等等,也分别测试过从 XP 到 Win11 的操作系统都能兼容。

小鹤音形为什么不行暂时还不清楚,稍后我再看一下。
但这个功能需要输入法的配合,如果输入法没有回复状态,那可能真的只有截屏或者带着他的状态栏在屏幕上移动了。

你不调用 winform.show(); 他就不会显示主窗口了呀。

我这么写只是为了方便测试,正式用你可能需要一个托盘图标,不然怎么退出呢。然后还得网上去找个合适的图标 …… 生成 EXE 还得到微软 Defender 过检测( 自用添加信任就可以 )。

正式发布一个程序事挺多的。

image
image
哈哈,的确打字的时候这个状态会被遮挡,但是你不说我还没发现,看来这个状态于我而言,也就是最开始让我知道一下就行了,反而不需要一直显示。

不知道有没有读取托盘信息的方法,各款输入法在托盘处显示信息的方式应该都比较统一吧?

托盘只是显示图标,据我所知应当没有你说的功能。

最新版已支持使用 timeout 指定超时:

//切换输入法状态显示 3 秒,设为 0 一直显示
imeBar.timeout = 0;

垂直偏移像素

imeBar.offsetY = 0

好吧,还是等你的exe算了 :smiley:

screenshots
你更新了代码后,没有直接更改caret.top的地方了,我进到库里去改,改完每次切换输入法状态,这个提示就会上下跳动一下,这是个什么原理呢?

大佬,为啥在 word 里那个状态栏会有点跳?
动画

可能你只改了一个地方,有多个地方调整位置,所以会跳一下。
稍后我加个调偏移量的参数。

感谢反馈,这可能是因为返回的光标位置本身就有轻微的像素跳动,稍后我研究一下。

没关系,现在这样已经很好了,哈哈
对了,大佬,能不能别把样式写死在库里,强迫症实在是不想去动库 :sob:
其实我觉得正式版的话,样式应该写进配置,方便用户修改 :slight_smile:

赞成,希望尽量对小白友好一点啊

image
screenshots
托盘图标搞定,也不跳了,调教得可以正常使用了,美滋滋。 :rofl:

样式并写没有写死在库里,
这个 key.ime.stateBar 返回的是 plus 控件,这个控件修改样式是非常方便的。aardio 只要用一个 plus 控件就可以完成整个界面,例如上面的 WubiLex ,还有 Gif123 都是用一个简单的 plus 控件画的所有界面。

个人能力和时间终是有限的,所以我提供了源代码,欢迎大家根据需要修改,原理我也写在上面了,用其他编程语言实现也并不难,相信有人可以做得比我更好。

从我的个人需求来说,我倾向于界面尽可能简洁,一个提示条越简单越好,太复杂可能会不必要的分散注意力,当然这仅仅是我的看法。

1 个赞

大佬所言极是,尽可能简洁,又不失功能性。


还是有些地方不能提示

感谢反馈,大多常用的程序都能支持,一般应当够用了。

有些特殊窗口取不到光标位置,暂时也没看到有其他程序能做到,如果你有更好的方法,欢迎分享。

有一个办法就是取不到光标跟着鼠标走,但填了这个坑,又会挖更多的坑,例如 Photoshop 这些不需要输入的界面就会很麻烦。