Error when trying to build a Global Keyboard Hook

2019-09-03 18:03发布

问题:

I'm developing a code to get keyboard input in KeyPress and KeyRelease events, but when i run the program nothing happens, what is wrong with my code? And how to get the pressed key value?

void hook()
{
    forever
    {
        XEvent event;
        Display *dpy = XOpenDisplay(NULL);
        XNextEvent(dpy, &event);
        switch (event.type)
        {
        case KeyPress:
            qDebug() << "keypress";
            break;
        case KeyRelease:
            qDebug() << "keyrelease";
            break;
        }
    }
}

回答1:

Read more about keyboard X11 events. You will get them only from some X11 windows, if that window has set some of KeyPressMask or KeyReleaseMask bits in its event mask. And that window should be created InputOnly or InputOutput

You are apparently using Qt (which is a good idea). Then, stick to Qt key events.

(if you want to catch all X11 key events, use the root window of the display. But then you are interfering with your window manager, which is a bad idea; learn more about ICCCM and EWMH)

Also, run xev -in a terminal- to understand more about X11 events



标签: c++ linux x11