我正在构建一个需要定期获取有关用户键盘信息的应用程序。这将是用户空闲检测应用程序。我有一个非常简单的解决方案,可以定期检查鼠标是否已移动。但是我无法找到任何合理的非root用户方法来检测是否已按下键盘。

我正在考虑在每个计时器超时时注册一个钩子(Hook),并在任何按键上注销它。因此,如果长时间没有按键,则我的程序将知道用户是否空闲。

无论如何,我找不到任何键的全局钩子(Hook),包括修饰符。是否有捷径可寻?还是会有更好的方法来检测键盘空闲状态?

谢谢

最佳答案

经过大量搜索,我发现了这一点:

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
}

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

10-08 03:18