我想制作一个按键翻译器,将一个按键“转换”到另一个按键,例如。 Ctrl + T 将被翻译为 Ctrl + X 。我希望它能成为“全球”;使其适用于任何应用程序。
作为概念验证,我正在尝试下面的代码,但它不起作用。问题在于,当我捕获按键时,我发出另一个按键,再次由我的代码捕获......我得到一个无限循环(计数器只有突破无限循环)。 我应该如何从按键事件处理程序发送按键事件?
#include <stdio.h>
#include <X11/Xlib.h>
#include <xdo.h>
#include <X11/extensions/XTest.h>
int main(void)
{
Display *dpy = XOpenDisplay(0x0);
XEvent ev;
int counter;
xdo_t *xdo = xdo_new(NULL);
XGrabKeyboard(dpy, DefaultRootWindow(dpy), False,
GrabModeAsync, GrabModeAsync,CurrentTime);
for(counter = 0; counter < 10; counter++)
{
XNextEvent(dpy, &ev);
if(ev.type == KeyPress) {
XUngrabKeyboard(dpy, CurrentTime);
printf("%d %d\n", ev.xkey.keycode, ev.xany.send_event);
xdo_keysequence(xdo, CURRENTWINDOW, "A", 0);
}
}
return 0;
}