我有一个小的WIN32 C-Application,其中我使用KBDLLHOOKSTRUCT
结构。此结构包含按下的键的VK代码。
我尝试将其转换为ASCII字符。为此我使用功能MapVirtualKey
,它运作良好。
唯一的问题是,一个VK代码可以保留多个字符。 例如:
在我的键盘上(瑞士德语)存在key-char 。。如果我按 Shift + 。,则会创建:
。 VK-Code是一样的。这没问题,我也可以检查是否按下 Shift 或 Caps Lock 被激活。
我唯一的问题是:我如何获得char':'? 我需要一个像这样的函数:
GetKeyChar(vkCode, shift)
我需要这个来获得键盘的“正常”和“移位”值。当然我可以硬编码,但我不喜欢这样做。
答案 0 :(得分:4)
问题是KBDLLHOOKSTRUCT
没有您进行翻译所需的所有信息。每按一次键,您都会收到一条消息。因此,对于Shift + X,您将收到一条输入消息,说明已按下Shift键,另一条消息表示已按下“X”键。
您需要调用GetKeyboardState才能获得Shift,Alt,Ctrl(和其他)键的状态。然后拨打ToAsciiEx
或ToUnicodeEx
。
答案 1 :(得分:2)
您正在寻找ToUnicode
,它会返回该按键生成的unicode字符。
答案 2 :(得分:2)
您正在寻找的功能包括:ToAscii,ToAsciiEx,ToUnicode,ToUnicodeEx。
答案 3 :(得分:0)
short VkKeyScan(char ch)
API包含了转移信息。它将char转换为虚拟键代码并转换状态。