切换输入法导致程序卡死问题的解决办法

在开发过程中遇到程序在切换输入法时卡死的问题,经过调查发现是由于某些输入法或代码处理输入法消息不当导致。输入法在Windows下是IME DLL,由输入法管理器控制。解决办法是在主线程中正确处理WM_INPUTLANGCHANGEREQUEST消息,防止界面挂死。
摘要由CSDN通过智能技术生成

       近日在开发类似QQ屏幕截图过程中,发现在输入文字时切换输入法(Ctrl+Shift)时,会导致程序出现“卡死”现象。为了方便代码重用,屏幕截图模块是以动态库方式封装起来的。出现“卡死”现象后,只能通过任务管理器强制杀掉对应的进程才能退出程序。于是,上网搜索了相关话题,发现原因通常是某种输入法如紫光或搜狗输入法导致了程序死机,也可能是某种软件与输入法冲突导致死机。

        通过代码注释最终找到了问题所在,可能在程序调用的某个dll库中截获了输入法消息,但是没有将输入法消息释放出来给界面线程处理导致界面挂死。

        那么输入法具体机制又是怎么的呢?Windows的输入法其实就是一个系统目录下的IME文件,IME文件其实就是一个特殊的DLL,它必须具有输入法程序所规定的那些接口。输入法是由输入法管理器(imm32.dll)控制的,输入法管理器又是由user32.dll控制的。当在应用程序中通过鼠标或者键盘(user32.dll捕获这些事件)激活某个输入法时,输入法管理器就会在那个应用程序的进程中加载对应的IME文件,加载IME文件跟加载普通的DLL并没有本质区别,所以,我们可以认为,输入法其实就是载入到应用程序中的一个DLL文件。在切换输入法之前输入法文件并不会被载入,切换输入法之后OS向系统中的获得焦点的窗口POST一条WM_INPUTLANGCHANGEREQUEST

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dvlinker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值