我有一个以ascii字符形式输入的小程序。我需要能够将它们转换为用于x11函数的键码。是否有一个xlib函数来执行此操作或另一个库?或者一个大型开关盒的效果最好?将ASCII字符转换为x11键码
4
A
回答
1
您可以使用XStringToKeysym
转换为KeySym
,然后按XKeysymToKeycode
转换为KeyCode
。
Display *display = ...;
KeySym sym_a = XStringToKeysym("A");
KeyCode code_a = XKeysymToKeycode(display, sym_a);
7
这个问题有一个旧的,错误的答案(来自@oldrinb),奇怪的是从未受到过挑战。如注释中所述,不能使用XStringToKeysym以通用方式将字符映射到KeySyms。它将适用于字母和数字,但这就是它的原因,因为KeySym名称直接映射到这些ASCII字符。对于其他ASCII字符(如标点符号或空格)不起作用。
但你可以做得比这更好。如果你看看<X11/keysymdef.h>
,你发现对于ASCII
0x20-0xFF,字符映射直接到XKeySyms
。所以,我想说直接使用这个范围的字符更简单,就像KeySyms
一样,然后将其余的32个字符映射到对应的KeyCodes
。所以,我想说的代码应该更恰当地:
Display *display = ...;
if ((int)c >= 0x20) {
XKeysymToKeycode(display, (KeySym)c);
} else {
... // Exercise left to the reader :-)
}
的“其他”子句将需要多个KeyCodes
因为例如ASCII
1(控制-A)是XK_A
与XK_CONTROL_R
(或XK_CONTROL_L
)修改。所以你必须发行例如:XK_CONTROL_L
DOWN,XK_A
DOWN,XK_A
UP,XK_CONTROL_L
UP。
这里有一个玩具程序,由通过模拟键盘事件呼应的第一个参数说明了这一点:
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xlib-xcb.h>
#include <xcb/xcb.h>
#include <xcb/xcb_event.h>
#include <xcb/xtest.h>
main(int argc, char **argv)
{
char *pc;
xcb_connection_t *xconn;
KeyCode code_a;
Display *dpy = XOpenDisplay(NULL);
xconn = XGetXCBConnection(dpy);
for (pc = argv[1]; *pc != '\0'; ++pc) {
if (*pc >= (char)0x20) {
code_a = XKeysymToKeycode(dpy, (KeySym)*pc);
xcb_test_fake_input(xconn, XCB_KEY_PRESS, code_a, XCB_CURRENT_TIME, XCB_NONE, 0, 0, 0);
xcb_test_fake_input(xconn, XCB_KEY_RELEASE, code_a, XCB_CURRENT_TIME, XCB_NONE, 0, 0, 0);
xcb_flush(xconn);
} else {
fprintf(stderr, "Eeek - out-of-range character 0x%x\n", (unsigned int)*pc);
}
}
XCloseDisplay(dpy);
}
你需要将它与链接:-lX11 -lxcb -lxcb-xtest -lX11-xcb
免责声明:无键符中的写作受到伤害这段代码。
相关问题
- 1. 将字符串转换为ASCII码
- 2. 将ASCII码转换为字符值
- 3. 将字符串转换为ASCII码
- 4. Bash:将非ASCII字符转换为ASCII
- 5. 将字符串转换为字符ascii
- 6. 将字符转换为ASCII字符
- 7. 使用grayVal转换为Ascii字符将图像转换为Ascii代码
- 8. 将字符串转换为ascii和ascii为字符串
- 9. Python将ASCII字符转换为字节
- 10. x86将ASCII字符转换为数字
- 11. 多个ascii代码转换为字符
- 12. SWT:将键码转换为字符串
- 13. 将键码转换为字符
- 14. 将字符转换为虚拟键码
- 15. 将字符串转换为ASCII和ASCII字符串
- 16. 将ASCII码转换为数字
- 17. 将Ascii字符串转换为位流
- 18. python将未知字符转换为ascii
- 19. 将字符串转换为ASCII值
- 20. 将字符转换为ASCII的Powershell
- 21. 将字符串转换为ASCII
- 22. C++ ::将ASCII值转换为字符串
- 23. 在JavaScript中将字符转换为ASCII
- 24. 将字符串转换为ASCII值python
- 25. 将ASCII转换为.NET中的字符
- 26. 将数值转换为ASCII字符?
- 27. Rails - 将ascii转换为字符
- 28. 将ascii值转换为字符
- 29. 将Unicode字符转换为扩展ASCII
- 30. 将Unicode字符串转换为ASCII
这在一般情况下不起作用。 XStringToKeysym映射KeySym名称,而不是ASCII字符。您经常可以正常使用,因为对于常见的打印字符,KeySym名称与字符匹配,但不适用于空格字符。 – BobDoolittle