xinput 2密钥代码到字符串

时间:2013-05-04 02:01:59

标签: x11 keycode

我正在使用XI2扩展程序来处理按键操作。然后在字段event-> xcookie->数据中我得到一个XIDeviceEvent deviceEvent。然后我在deviceEvent-> detail中获得了32位密钥代码。

如何将此32位密钥代码转换为字符串或字符?就像按下Q-Key一样,我想得到字符串“q”。

2 个答案:

答案 0 :(得分:1)

好的,我想我想出来了:

XIDeviceEvent *d_ev = (XIDeviceEvent*) ev.xcookie.data;
KeyCode keycode = d_ev->detail;
int keysyms_per_keycode;
KeySym *keysym = XGetKeyboardMapping (dpy, keycode, 1, &keysyms_per_keycode);
char * result = XKeysymToString (keysym[0]);

keysym [0]中的0可能表示没有修饰符。 keysym [1]是shift( - >大写字母),最多是keysyms_per_keycode-1,还有其他可能的修饰符。

答案 1 :(得分:0)

XGetKeyboardMapping可以为您提供整个表,因此使用它来获取单个键代码是过度的,但您应该至少XFree结果以避免内存泄漏。如果你想一次获得一个键,这看起来更清晰

        KeySym ks = XkbKeycodeToKeysym(dpy, ev->detail, 0, 0);
        char * result = XKeysymToString(ks);

虽然我还不相信它确实需要考虑xkb映射。