Как получить какой-либо ключ X?

Я создаю приложение, для которого я должен периодически получать информацию о пользовательской клавиатуре. Это будет пользователем неактивное приложение обнаружения. У меня есть довольно простое решение периодически проверки, если мышь была перемещена. Но я не могу изобразить никого разумного не корневой способ обнаружить, если клавиатура была нажата.

Я думал о регистрации рычага, что каждый тайм-аут таймера и на любом нажатии клавиши не зарегистрировал его. Таким образом, если не будет никакого нажатия клавиши в течение долгого времени затем, то моя программа будет знать, неактивен ли пользователь.

Так или иначе я не мог найти глобальные рычаги ни для какого ключа, включая модификаторы. Существует ли простой способ сделать это? Или у кого-то был бы лучший способ обнаружить безделье клавиатуры?

Спасибо

5
задан David Polák 8 November 2018 в 11:31
поделиться

2 ответа

После долгих поисков я обнаружил следующее:

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–300 мс, он обнаруживает любую нажатую клавишу в любом месте X.

4
ответ дан 15 December 2019 в 06:17
поделиться

Взгляните на исходный код xautolock , который делает именно то, что вам нужно, как для клавиатуры, так и для мыши. http://www.ibiblio.org/pub/Linux/X11/screensavers/xautolock-2.2.tgz

1
ответ дан 15 December 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: