Error when trying to build a Global Keyboard Hook in Ubuntu Linux

为君一笑 提交于 2019-12-25 02:38:50

问题


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



来源:https://stackoverflow.com/questions/14668906/error-when-trying-to-build-a-global-keyboard-hook-in-ubuntu-linux

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!