我想制作一个按键翻译器,可以将一个按键“转换”为另一个按键,例如。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;
}