我目前正在使用X11 lib编写用于Linux的虚拟键盘,但我找不到能够模拟任何死键的KeyPress事件的方法。
例如,我尝试过使用分配的宏XK_aacute编写“á”,但没有任何反应。
后来我试图先发送XK_acute(急性口音宏),然后再发送XK_a,再也没有发生任何事情:(
在KDE虚拟键盘“Kvkbd”中可以执行此操作,因此我下载了源代码,但它仅支持英文键盘布局
这是我的测试代码:
#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <X11/extensions/XTest.h>
#include <iostream>
int main(){
Display *display;
unsigned int keycode;
unsigned int keycode1;
display = XOpenDisplay(NULL);
keycode = XKeysymToKeycode(display, XK_aacute);
XTestFakeKeyEvent(display, keycode, True, 0);
XTestFakeKeyEvent(display, keycode, False, 0);
keycode1 = XKeysymToKeycode(display, XK_acute);
XTestFakeKeyEvent(display, keycode1, True, 0);
keycode = XKeysymToKeycode(display, XK_a);
XTestFakeKeyEvent(display, keycode, True, 0);
XTestFakeKeyEvent(display, keycode, False, 0);
XTestFakeKeyEvent(display, keycode1, False, 0);
keycode = XKeysymToKeycode(display, XK_D);
XTestFakeKeyEvent(display, keycode, True, 0);
XTestFakeKeyEvent(display, keycode, False, 0);
XFlush(display);
}
任何帮助或想法将不胜感激
最佳答案
我只是想出了¬¬
#include <X11/extensions/XTest.h>
#include <X11/keysym.h>
#include <X11/Xlib.h>
#include <iostream>
int main(){
Display *display;
unsigned int keycode;
unsigned int keycode1;
display = XOpenDisplay(NULL);
keycode1 = XKeysymToKeycode(display, XK_dead_acute);
XTestFakeKeyEvent(display, keycode1, true, 0);
keycode = XKeysymToKeycode(display, XK_A);
XTestFakeKeyEvent(display, keycode, true, 0);
XTestFakeKeyEvent(display, keycode, false, 0);
XTestFakeKeyEvent(display, keycode1, false, 0);
XFlush(display);
}
我使用了错误的宏