如何在按下修改键的情况下从 X11 中的 KeyPress 和 KeyRelease 事件获取虚拟键码
How to get virtual key codes from KeyPress and KeyRelease events in X11 with modifier keys down
当从 X11 接收到 KeyPress
或 KeyRelease
事件时,我如何将结果转换为映射到物理键 0 到 9 和 A 到 Z 的虚拟代码,独立于键盘布局并独立于按下的任何修饰键?
我试过这个:
XLookupString((XKeyEvent *) &ev, buffer, 10, &keysym, &compose);
这给了我一个 keysym
但这不是我想要的,因为只要按下 SHIFT、ALT 等修改键之一,它就会改变。例如,在德语键盘上用 SHIFT 按下“1”时,keysym
将是 33,对应于 !
字符。但是,我想获得已按下“1”的信息。
我也尝试查看 XKeyEvent
的 keycode
成员,但这也没有帮助,因为它似乎是原始扫描码,在这里没有帮助,因为它会映射不同语言的不同键。
那么,即使 SHIFT、ALT 等修改键也按下了,我如何才能找出按下的键?
回答我自己的问题:将 index
参数设置为 0 的 XKeycodeToKeysym()
允许我在不从 XKeyEvent
.[=13= 进行任何修饰符修改的情况下获取原始密钥]
当从 X11 接收到 KeyPress
或 KeyRelease
事件时,我如何将结果转换为映射到物理键 0 到 9 和 A 到 Z 的虚拟代码,独立于键盘布局并独立于按下的任何修饰键?
我试过这个:
XLookupString((XKeyEvent *) &ev, buffer, 10, &keysym, &compose);
这给了我一个 keysym
但这不是我想要的,因为只要按下 SHIFT、ALT 等修改键之一,它就会改变。例如,在德语键盘上用 SHIFT 按下“1”时,keysym
将是 33,对应于 !
字符。但是,我想获得已按下“1”的信息。
我也尝试查看 XKeyEvent
的 keycode
成员,但这也没有帮助,因为它似乎是原始扫描码,在这里没有帮助,因为它会映射不同语言的不同键。
那么,即使 SHIFT、ALT 等修改键也按下了,我如何才能找出按下的键?
回答我自己的问题:将 index
参数设置为 0 的 XKeycodeToKeysym()
允许我在不从 XKeyEvent
.[=13= 进行任何修饰符修改的情况下获取原始密钥]