X11/Xlib c/c++ char to XKeyEvent keycode

X11/Xlib c/c++ char to XKeyEvent keycode

本文关键字:to XKeyEvent keycode char c++ Xlib X11      更新时间:2023-10-16

我的需要是将一个字符转换成一个键码,以发送一个事件与XSendEvent

我使用XStringToKeysym("a"),但当我使用像:这样的字符时,我得到一个无效的结果。

是否有可能绕过keysym的使用并直接将char转换为XKeyEvent keycode?

感谢任何帮助!

您可以获得该字符的Unicode表示形式,并在其前面加上U。例如,在:的情况下,它们将做同样的事情:

XStringToKeysym("colon")
XStringToKeysym("U003A")

实际上,你可以做得比@Artyom的答案更好。如果您查看<X11/keysymdef.h>,您会发现对于ASCII 0x20-0xFF,字符将直接映射到XKeySyms。所以,我想说直接使用这个字符范围作为KeyCodes更简单,只映射剩下的32个字符。

包含示例代码的更详细答案,参见:https://stackoverflow.com/a/25771958/3149905

XStringToKeysym将名称转换为键盘符号,因此":"不起作用,您必须使用"colon"

键码不是标准的(键盘布局各不相同),因此使用键符并在<X11/keysymdef.h>中定义。

最好是将XKeysymToKeycode与XK_a和xk_冒号一起使用。