LitnhJacuzzi / IMBlocker-Update

Update versions of IMBlocker mod.
7 stars 0 forks source link

启动时模组内容不会生效 #1

Open Linwendong83 opened 9 months ago

Linwendong83 commented 9 months ago

如题,需要激活输入法后用esc手动关闭才会进入正常状态

LitnhJacuzzi commented 9 months ago

请提供更详细的解释说明实际状态期望状态的差异以便更准确地给问题定性。

请注意,切换输入法和切换输入法的状态是两个不同的操作:输入法就是任务栏上的语言菜单中被选中的项(比如ENG 英语(美国)/美式键盘 键盘,中文(简体,中国)/微软拼音等);输入法的状态是指当前语言菜单中选中的输入法正在使用的输入规则,以中文输入法为例,此状态决定了当前是否允许输入法将键盘输入吸收并转换为中文字符。Windows系统没有提供支持切换输入法的系统调用,只有切换输入法状态的系统调用,因此这个模组的功能是自动切换输入法的状态而不是自动切换输入法,这意味着你需要一直保持中文输入法开启此模组才会发挥其作用。

Linwendong83 commented 9 months ago

https://github.com/LitnhJacuzzi/IMBlocker-Update/assets/93021538/02b56c53-efed-44d9-b1d7-c0fea6ea6972

LitnhJacuzzi commented 9 months ago

@Linwendong83 此问题的原因已经确定,在MinecraftClient类中被注入的onWindowFocusChanged()在窗口初始状态为失焦且第一次获得焦点时不会被调用,导致第一次从任务栏切换回MC窗口时不会同步当前MC内的输入法状态,如果你从MC启动到加载完毕的过程中不切换到其他窗口此问题应该不会出现。在不改动模组内容的情况下解决此问题的方法很简单,只需先让游戏窗口失去焦点再获得焦点即可正常监听窗口焦点变化并同步输入法状态。