X窗口的KeyPress事件

时间:2011-11-08 10:00:37

标签: unix x11

我正在尝试编写一个小应用来捕获X下窗口的击键,然后使用OSD或其他东西将它们显示在屏幕上。这个想法是用它来做截屏和类似的东西。

我在xev尝试了一些手术并让它工作正常,但后来发现了一些有趣的东西。如果我在自己创建的窗口上使用xev,则会注册KEyPress和KeyRelease事件,我可以看到它们。但是,如果我使用xev的-id开关监视另一个窗口并尝试在那里记录击键,则不会始终显示它们的KeyPress和KeyRelease事件。在某些事情发生时我似乎得到了PropertyNotify个事件但我感兴趣的不是KeyPressKeyRelease

某些窗口按预期运行(例如gnome-terminal)。其他一些人没有(例如emacs-gtk)。

如何获取这些窗口的按键?

1 个答案:

答案 0 :(得分:2)

键事件会转到具有焦点的窗口,该窗口并不总是具有焦点的窗口。当我尝试在我的firefox窗口上使用xev时,关键事件会转到其中一个不可查看的子节点(相对左上角为(-1,-1),大小为(1,1)。

您可以使用XGetInputFocus()找出哪个窗口具有焦点。