输入法信息捕获总结

    输入法信息捕获相关的消息有WM_IME_SETCONTEXT、WM_IME_SELECT和WM_IME_NOTIFY。WM_IME_SETCONTEXT为文本框激活后输入法上下文激活的消息,WM_IME_SELECT为输入法改变的消息,WM_IME_NOTIFY为输入法相关通知消息,根据wParam区分不同的消息,其中IMN_OPENCANDIDATE为候选项打开,IMN_CHANGECANDIDATE为候选项改变,IMN_CLOSECANDIDATE为候选项关闭。
    通过Hook GetMessage只能Hook到WM_IME_NOTIFY中的上述三个消息,它的其他消息以及WM_IME_SETCONTEXT和WM_IME_SELECT都捕获不到。因此建议使用Hook CallWnd。每个消息系统都会发送两次,一个是当前输入法发送的,一个是默认输入法发送的。因此,可以通过ImmGetDefaultIMEWnd(GetFocus())获取默认输入法句柄,然后将它的消息都忽略。当前文本窗体需要通过GetFocus()获取,::ImmGetDescriptionA(::GetKeyboardLayout(GetCurrentThreadId())可以获取当前输入法的描述信息。ImmGetContext获取输入法上下文,当前的线程上下文必须是窗体创建上下文,使用完后需要用ImmReleaseContext释放上下文句柄。ImmGetCandidateListCount可以获取所有的候选项,获取的内容保存在CANDIDATELIST结构中。这个结构的dwCount表示候选项的总个数,dwPageSize表示每页大小,dwSelection表示当前候选项。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值