Я создаю приложение, для которого я должен периодически получать информацию о пользовательской клавиатуре. Это будет пользователем неактивное приложение обнаружения. У меня есть довольно простое решение периодически проверки, если мышь была перемещена. Но я не могу изобразить никого разумного не корневой способ обнаружить, если клавиатура была нажата.
Я думал о регистрации рычага, что каждый тайм-аут таймера и на любом нажатии клавиши не зарегистрировал его. Таким образом, если не будет никакого нажатия клавиши в течение долгого времени затем, то моя программа будет знать, неактивен ли пользователь.
Так или иначе я не мог найти глобальные рычаги ни для какого ключа, включая модификаторы. Существует ли простой способ сделать это? Или у кого-то был бы лучший способ обнаружить безделье клавиатуры?
Спасибо
После долгих поисков я обнаружил следующее:
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.
Взгляните на исходный код xautolock
, который делает именно то, что вам нужно, как для клавиатуры, так и для мыши.
http://www.ibiblio.org/pub/Linux/X11/screensavers/xautolock-2.2.tgz