- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个小型 WIN32 C 应用程序,我在其中使用 KBDLLHOOKSTRUCT
结构体。此结构包含按下的键的 VK 代码。
我尝试将其转换为 ASCII 字符。为此,我使用函数 MapVirtualKey
, 效果很好。
唯一的问题是,一个 VK 代码可以保留多个字符。示例:
在我的键盘(瑞士-德语)上存在键字符 .。如果我按 Shift+. 然后它会创建一个 :
。 VK 代码是相同的。没问题,我还可以检查 Shift 是否被按下或 Caps Lock 是否被激活。
我唯一的问题是:如何获取字符“:”?我需要这样的功能:
GetKeyChar(vkCode, shift)
我需要这个来获得键盘的“正常”和“移动”值。我当然可以对此进行硬编码,但我不喜欢以这种方式进行。
最佳答案
问题是 KBDLLHOOKSTRUCT
没有您进行翻译所需的所有信息。每次按下某个键时,您都会收到一条消息。因此,对于 Shift+X,您会收到一条输入消息,指出按下了 Shift 键,另一条消息指出按下了“X”键。
您需要调用GetKeyboardState为了获得 Shift、Alt、Ctrl(可能还有其他)键的状态。然后调用ToAsciiEx
或ToUnicodeEx
。
关于c - 来自 VK_Code 的 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7299577/
在编写 Windows 应用程序时,文档指出某些 VK_CODE 是可显示字符,例如 VK_OEM1 是“o with an umlaut”。如何从非 ASCII 字符的 WPARAM 转换为可显示的
我有一个小型 WIN32 C 应用程序,我在其中使用 KBDLLHOOKSTRUCT结构体。此结构包含按下的键的 VK 代码。 我尝试将其转换为 ASCII 字符。为此,我使用函数 MapVirtua
我是一名优秀的程序员,十分优秀!