我有一个小的WIN32 C-Application,我使用KBDLLHOOKSTRUCT结构 . 此结构包含按下的键的VK代码 .
我尝试将其转换为ASCII字符 . 为此,我使用功能MapVirtualKey,它运作良好 .
唯一的问题是,一个VK代码可以保留多个字符 . 例:
在我的键盘上(瑞士 - 德国)存在关键字符..如果我按Shift键 . 然后它创建一个 :
. VK-Code是一样的 . 这没问题,我也可以检查是否按下Shift或激活大写锁定 .
我唯一的问题是:我如何获得char':'?我需要一个这样的函数:
GetKeyChar(vkCode, shift)
我需要这个来获得键盘的“正常”和“移位”值 . 当然我可以硬编码,但我不喜欢这样做 .
4 回答
问题是
KBDLLHOOKSTRUCT
不会收到输入消息,说明按下了Shift键,另一条消息说按了"X"键 .您需要调用GetKeyboardState才能获得Shift,Alt,Ctrl(和其他)键的状态 . 然后调用
ToAsciiEx
或ToUnicodeEx
.您正在寻找的功能是:ToAscii,ToAsciiEx,ToUnicode,ToUnicodeEx .
short VkKeyScan(char ch)
API包含班次信息 . 它将char转换为虚拟键代码和转换状态 .见:Convert character to the corresponding virtual-key code
您正在寻找ToUnicode,它返回该按键生成的unicode字符 .