我有一個以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. Bash:將非ASCII字符轉換爲ASCII
- 3. 使用grayVal轉換爲Ascii字符將圖像轉換爲Ascii代碼
- 4. x86將ASCII字符轉換爲數字
- 5. 多個ascii代碼轉換爲字符
- 6. 將字符轉換爲虛擬鍵碼
- 7. 將鍵碼轉換爲字符
- 8. SWT:將鍵碼轉換爲字符串
- 9. 將字符串轉換爲ASCII和ASCII字符串
- 10. 在JavaScript中將字符轉換爲ASCII
- 11. Rails - 將ascii轉換爲字符
- 12. python將未知字符轉換爲ascii
- 13. 將字符串轉換爲ASCII
- 14. 將字符轉換爲ASCII的Powershell
- 15. 將字符串轉換爲ASCII值python
- 16. 將數值轉換爲ASCII字符?
- 17. 將Ascii字符串轉換爲位流
- 18. 將字符串轉換爲ASCII值
- 19. 將ASCII轉換爲.NET中的字符
- 20. 將Unicode字符串轉換爲ASCII
- 21. 將ASCII編碼轉換爲它的ASCII字符代碼 - C(不打印!)
- 22. 將ASCII字符轉換爲十六進制轉義字符串
- 23. 在Java中將十六進制字符串轉換爲ASCII碼
- 24. 下面的代碼是否將字符轉換爲其ASCII值?
- 25. 如何將unicode字符轉換爲delphi 7中的ascii代碼?
- 26. 將2個字符轉換爲ascii二進制代碼
- 27. 如何將ASCII碼轉換爲C++中的字符?
- 28. 如何將Unicode字符串轉換爲java中的ASCII碼
- 29. 如何使用javascript將西里爾字符轉換爲ASCII碼
- 30. Python將混合ASCII碼轉換爲字符串
這在一般情況下不起作用。 XStringToKeysym映射KeySym名稱,而不是ASCII字符。您經常可以正常使用,因爲對於常見的打印字符,KeySym名稱與字符匹配,但不適用於空格字符。 – BobDoolittle