如何使用修饰键向下从X11中的KeyPress和KeyRelease事件获取虚拟键代码

时间:2018-01-04 15:38:44

标签: c x11 xlib

当从X11收到KeyPressKeyRelease事件时,如何将结果转换为映射到物理键0到9和A到Z的虚拟代码,与键盘布局无关并且不受任何修改键的影响?

我试过这个:

XLookupString((XKeyEvent *) &ev, buffer, 10, &keysym, &compose);

这给了我一个keysym,但这不是我想要的,因为只要按下SHIFT,ALT等修改键之一就会改变它。例如,按下" 1"在带有SHIFT的德语键盘上,keysym将为33,对应于!个字符。我希望得到的信息是" 1"但是,已经被压了。

我还试图查看keycode的{​​{1}}成员,但这也没有帮助,因为它似乎是一个原始的扫描码,这在这里没有用,因为它会映射用不同语言的不同键。

那么,即使SHIFT,ALT等修改键也出现故障,如何找到已按下的键呢?

1 个答案:

答案 0 :(得分:0)

要回答我自己的问题:将XKeycodeToKeysym()参数设置为0,index允许我获取原始密钥而不需要修改XKeyEvent中的任何修饰符。