2

将消息从SetWindowsHookExwithWH_KEYBOARD_LL转换为有用的按键表示的正确方法是什么?

我知道这很可能涉及理解本地键盘的映射。(注意:为了简单起见,我只考虑何时按下一个键,而不是何时释放它)

从广义上讲,似乎存在三种情况:

  • 按下特殊键(Ctrl/Escape/Shift/Alt)
  • 按下标准键(A-Z,0-9等...请注意,a两者A都读作A
  • 一些难以定义的情况,如数字键盘和F1-F12

可以根据需要处理特殊键,并且有一些有用的查找System.Windows.Forms.Keys

但是如果我要(在英式英语键盘上)一个感叹号,它会被检测为Shift-Down1Shift up

由于在代码通过键盘“转换”层后,我的水平太低(我相信)无法获取代码,我很好奇我将如何正确解释它们。

至于我为什么要这样做。它一开始是为了给我编写的媒体播放器提供方便的快捷方式,它可以在任何地方工作,甚至在游戏内部(有些游戏似乎会拦截击键并阻止它们传播到操作系统)。实际上,只要是我使用该应用程序(仅限可能的用户),我实际上已经得到了足够的东西,但我的好奇心被激起了,如果我愿意,我该如何进一步发展。

4

2 回答 2

2

根据语言(及其死键的使用),这可能非常复杂。ToAsciiEx适用于简单的情况,但如果涉及死键或 IME,事情很快就会变得非常复杂。

Michael Kaplan 的博客有大量关于键盘布局和Keyboard Layout Creator的文章,它是一种用于创建键盘布局(将键映射到字符的最简单方法)的工具。当一组击键映射到单个字符时,使用键盘布局创建器。在这些情况下,可以进行映射,但是当需要多个键来确定一个字符时,它会变得有些棘手。

日语、中文或韩语等语言没有从击键到字符的单一映射。对于这些语言,需要输入法编辑器;这些通常使用Text Services Framework,这是一组广泛的 API,输入法编辑器(以及其他文本服务,如手写识别和语音识别)用于与应用程序通信以确定从击键到字符的映射。因为使用 IME 从击键到字符的映射是由代码定义的,所以低级键盘挂钩通常根本无法执行这种映射。

于 2013-08-01T00:29:00.983 回答
1
于 2013-08-01T15:57:14.040 回答