如何捕获X中的任何键?

Dav*_*lák 5 c++ linux keyboard hook

我正在构建一个应用程序,我需要定期获取有关用户键盘的信息.它将成为用户空闲检测应用程序.我有一个相当简单的解决方案来定期检查鼠标是否已被移动.但我无法找出任何合理的非根方式来检测键盘是否被按下.

我正考虑在每个定时器超时时注册一个挂钩,并在任何按键上按下以取消注册它.因此,如果长时间没有按键,那么我的程序将知道用户是否空闲.

无论如何,我找不到任何键的任何全局钩子,包括修饰符.是否有捷径可寻?或者有人有更好的方法来检测键盘闲置?

谢谢

Dav*_*lák 4

经过大量搜索后我发现了这个:

bool kbdActivity(Display* display)  // checks for key presses
{
    XQueryKeymap(display, keymap);  // asks x server for current keymap
    for (int i=0; i<32; i++)        // for 0 to 32 (keymap size)
    {
        if (prevKeymap[i] != keymap[i])   // if previous keymap does not
        {                               // equal current keymap 
            XQueryKeymap(display, prevKeymap);  // ask for new keymap
            return true;                // exit with true
        }
    }
    return false;                   // no change == no activity
}
Run Code Online (Sandbox Code Playgroud)

当我每 100-300 毫秒调用它时,它会检测到 X 中任何位置的任何按下的键。