6

我有一个小型 WIN32 C 应用程序,我在其中使用该KBDLLHOOKSTRUCT结构。该结构包含按键的 VK 代码。

我尝试将其转换为 ASCII 字符。为此,我使用了 Function MapVirtualKey,效果很好。

唯一的问题是,一个 VK 代码可以保留多个字符。例子:

在我的键盘(瑞士德语)上存在 key-char .。如果我按Shift+.然后它会创建一个:. VK 代码是相同的。没问题,我也可以检查是否Shift被按下或被Caps Lock激活。

我唯一的问题是:我怎样才能得到字符':'?我需要这样的功能:

GetKeyChar(vkCode, shift)

我需要这个来获得键盘的“正常”和“移位”值。当然我可以硬编码这个,但我不喜欢这样做。

4

4 回答 4

4

问题是KBDLLHOOKSTRUCT没有您进行翻译所需的所有信息。每次按下某个键时,您都会收到一条消息。因此,对于 Shift+X,您将收到一条输入消息说按下了 Shift 键,而另一条消息说按下了“X”键。

您需要调用GetKeyboardState以获取 Shift、Alt、Ctrl 和(可能还有其他)键的状态。然后调用ToAsciiExToUnicodeEx

于 2011-09-04T13:54:59.520 回答
2

您正在寻找ToUnicode,它返回由该按键生成的 unicode 字符。

于 2011-09-04T13:46:59.280 回答
2

您正在寻找的函数是:ToAscii、ToAsciiEx、ToUnicode、ToUnicodeEx。

于 2011-09-04T13:47:37.847 回答
0

short VkKeyScan(char ch)API 已包含班次信息。它将字符转换为虚拟键代码并转换状态。

看到这个:将字符转换为相应的虚拟键码

于 2011-11-09T09:35:28.500 回答