来自 VK_Code 的 ASCII 字符

Kev*_*ier 5 c winapi keycode shift

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

我尝试将其转换为 ASCII 字符。为此,我使用了 Function MapVirtualKey,它运行良好。

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

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

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

GetKeyChar(vkCode, shift)

我需要这个来获得键盘的“正常”和“移位”值。当然,我可以对此进行硬编码,但我不喜欢以这种方式进行。

Jim*_*hel 4

问题在于,他们KBDLLHOOKSTRUCT没有完成翻译所需的所有信息。每次按下某个键时您都会收到一条消息。因此,对于 Shift+X,您将收到一条输入消息,表明已按下 Shift 键,并收到另一条消息,表明已按下“X”键。

您需要调用GetKeyboardState才能获取 Shift、Alt、Ctrl(或许还有其他)键的状态。然后致电ToAsciiExToUnicodeEx.