尝试在Ubuntu Linux中构建全局键盘挂钩时出错

时间:2013-02-03 02:29:21

标签: c++ linux x11

我正在开发一个代码来获取KeyPress和KeyRelease事件中的键盘输入,但是当我运行该程序时没有任何反应,我的代码有什么问题?以及如何获得按下的键值?

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 个答案:

答案 0 :(得分:1)

详细了解keyboard X11 events。如果该窗口在其event mask中设置了一些KeyPressMaskKeyReleaseMask位,您将仅从某些X11窗口获取它们。该窗口应为created InputOnlyInputOutput

你显然正在使用Qt(这是一个好主意)。然后,坚持Qt key事件。

(如果你想捕获所有X11键事件,请使用显示的根窗口。但是你干扰了你的窗口管理器,这是一个坏主意;了解更多关于ICCCM和{{3 }})

此外,在终端中运行xev - 以了解有关X11事件的更多信息