X11按键翻译器

时间:2013-07-17 22:32:33

标签: x11

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

0 个答案:

没有答案