注册

CpuDbg x96

查看: 1084|回复: 0
收起左侧

[多款调试器] 三方输入法下快捷键功能失效问题

[复制链接]
发表于 2022-9-14 04:42:03 | 显示全部楼层 |阅读模式
在刚写到 标签 备注 书签 的时候,我就发现这个问题了,  比如加载一个程序,点击反汇编窗口,然后按备注/注释的热键  ;(分号) 在中文输入法下,你按分号是没有效果的.测试od1.x是要按两次 ;(分号) 才能弹出备注窗口.   od2.x 和 odx64 是完全没有效果.
测试yzdbg一样没有效果.
测试x64dbg有效果.
---------------------------------------------------
分析问题:
我在回调的 wm_keydown 消息里下断, 分析发现, 正常情况 ;(分号) 应该是 VK_OEM_1, 可是到达的确是VK_PROCESSKEY.
原来是安装三方输入法后, 在切换到三方输入法后,用户按键就会全部变成VK_PROCESSKEY.

解决方案:
既然是输入法的问题,那很简单,关闭输入法就行了. 搜索了一下, 发现 ImmDisableIME 函数可以关闭输入法.

ImmDisableIME

ImmDisableIME


但是关闭之后, 你要在备注或者标签栏上输入中文是输入不了的. 除非在临时打开. 这样太过麻烦了.
后来搜索发现 Imm 开头的有一系列相关函数. 其中有一个 ImmGetVirtualKey 函数, 这个函数可以将用户输入的 转化成 原先的键值.

ImmGetVirtualKey

ImmGetVirtualKey


上面这个是 01年10月份的离线MSDN说明. 按上面的在 wm_keydown 下面调用后发现获取的返回值还是 VK_PROCESSKEY, 很是奇怪,在网上找了一圈也没有找到类似的问题.
于是到在线的MSDN上看了一下, 发现内容和离线版的说明有点不一样.如下:

ImmGetVirtualKey

ImmGetVirtualKey

重点看返回值这句: If TranslateMessage is called by the application, ImmGetVirtualKey returns VK_PROCESSKEY; otherwise, it returns the virtual key.
我理解的大概意思就是调用的时机晚了.我将调用放到 getmessage 消息循环中调用,发现成功返回虚拟键值.  如下:


解决中文输入法失效

解决中文输入法失效


最终问题终于解决掉了 :)


回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注册

QQ|Archiver|手机版| CpuDbg x96

GMT, 2024-5-18 13:36 , Processed in 0.078125 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表