我正在使用XI2扩展程序来处理按键操作。然后在字段event-> xcookie->数据中我得到一个XIDeviceEvent deviceEvent。然后我在deviceEvent-> detail中获得了32位密钥代码。
如何将此32位密钥代码转换为字符串或字符?就像按下Q-Key一样,我想得到字符串“q”。
答案 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映射。