1

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

0 回答 0