【问题标题】:Hardware scan code to ascii char conversion硬件扫描码到ascii char转换
【发布时间】:2012-07-07 21:36:21
【问题描述】:

是否有用于将硬件扫描代码转换为 ASCII 字符的 Windows API?

【问题讨论】:

  • 您是否要获取等效的键盘字符?如果是这样,则有一个用于转换为虚拟键码的 API MapVirtualKey
  • 要跟进上述评论,如果您想转换 scancode 而不是虚拟键码,则需要使用 MapVirtualKeyEx

标签: c++ windows winapi keyboard ascii


【解决方案1】:

MapVirtualKeyExToAsciiEx 是您正在寻找的 - 示例用法 here

【讨论】:

  • 该代码在带有死键或 IME 的键盘上不起作用。这些键盘的字符转换更加复杂。
【解决方案2】:

Windows 是一个 Unicode 操作系统,它并不特别喜欢 ASCII。它也不偏向世界各地人们使用机器的方式。

由键盘输入事件(如 WM_KEYDOWN)产生的虚拟键的映射由窗口过程执行。它产生一个 WM_CHAR 键消息,底层的 api 函数是 ToUnicodeEx(),也暴露给你。一个有很多参数的函数,lpKeyState 参数对于翻译修饰键和死键是必不可少的,比如 Alt+Gr 和 Shift。 dwhkl 参数对于允许不同用户使用不同的键盘布局至关重要。您不想参与进行相同翻译的业务,尤其是键盘状态是进程本地属性。

但是 ToUnicodeEx() 是它所需要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    相关资源
    最近更新 更多