VK_Code中的ASCII字符

时间:2011-09-04 13:42:07

标签: c winapi keycode shift

我有一个小的WIN32 C-Application,其中我使用KBDLLHOOKSTRUCT结构。此结构包含按下的键的VK代码。

我尝试将其转换为ASCII字符。为此我使用功能MapVirtualKey,它运作良好。

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

在我的键盘上(瑞士德语)存在key-char 。如果我按 Shift + ,则会创建:。 VK-Code是一样的。这没问题,我也可以检查是否按下 Shift Caps Lock 被激活。

我唯一的问题是:我如何获得char':'? 我需要一个像这样的函数:

GetKeyChar(vkCode, shift)

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

4 个答案:

答案 0 :(得分:4)

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

您需要调用GetKeyboardState才能获得Shift,Alt,Ctrl(和其他)键的状态。然后拨打ToAsciiExToUnicodeEx

答案 1 :(得分:2)

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

答案 2 :(得分:2)

您正在寻找的功能包括:ToAscii,ToAsciiEx,ToUnicode,ToUnicodeEx。

答案 3 :(得分:0)

short VkKeyScan(char ch) API包含了转移信息。它将char转换为虚拟键代码并转换状态。

请参阅:Convert character to the corresponding virtual-key code