转换消息的正确方法是什么SetWindowsHookEx http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990%28v=vs.85%29.aspx with WH_KEYBOARD_LL http://msdn.microsoft.com/en-us/library/windows/desktop/ms644985%28v=vs.85%29.aspx转化为按下的键的有用表示?
我知道这很可能涉及理解本地键盘的映射。 (注意:为了简单起见,我只考虑按下按键的时间,而不考虑释放按键的时间)
概括来说,似乎有以下三种情况:
- 按下特殊键(Ctrl/Escape/Shift/Alt)
- 按下标准键(
A-Z
, 0-9
等...请注意a
and A
两者都读作A
)
- Some hard to define cases like number pad and F1-F12
可以根据需要处理特殊键,并且有一些有用的查找System.Windows.Forms.Keys http://msdn.microsoft.com/en-us/library/system.windows.forms.keys%28v=vs.85%29.aspx
but if I were to do (on a UK-English Keyboard) an exclamation mark, it's detected as Shift-Down1Shift up
由于我的挂钩级别太低(我相信),无法在代码通过键盘“转换”层后获取代码,所以我很好奇如何正确解释它们。
至于我为什么要这样做。它最初是为了为我编写的媒体播放器提供方便的快捷方式,该播放器可以在任何地方工作,甚至在游戏中(有些游戏似乎会拦截击键并阻止它们传播到操作系统)。实际上,我已经得到了足够的东西来满足我的需要,只要我使用该应用程序(仅限可能的用户),但我的好奇心被激起了,如果我愿意的话,我可以如何进一步采取这一点。
根据语言(及其死键的使用),这可能非常复杂。ToAsciiEx
适用于简单的情况,但如果涉及死键或输入法,事情很快就会变得非常复杂。
迈克尔·卡普兰的博客 http://blogs.msdn.com/b/michkap/有一系列关于键盘布局和键盘布局创建器 http://msdn.microsoft.com/en-us/goglobal/bb964665.aspx,这是一个用于创建键盘布局的工具(将键映射到字符的最简单方法)。当一组击键映射到单个字符时,将使用键盘布局创建器。在这些情况下,可以完成映射,但是当需要多个键来确定一个字符时,映射就变得有些棘手。
日语、中文或韩语等语言没有从击键到字符的单一映射。对于这些语言,需要输入法编辑器;这些通常使用文本服务框架 http://msdn.microsoft.com/en-us/library/windows/desktop/ms629032%28v=vs.85%29.aspx,这是一组广泛的 API,输入法编辑器(以及其他文本服务,例如手写识别和语音识别)使用它们与应用程序进行通信,以确定从击键到字符的映射。由于从击键到 IME 字符的映射是由代码定义的,因此低级键盘挂钩通常根本无法执行此映射。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)