我正在尝试编写一个小应用来捕获X下窗口的击键,然后使用OSD或其他东西将它们显示在屏幕上。这个想法是用它来做截屏和类似的东西。
我在xev尝试了一些手术并让它工作正常,但后来发现了一些有趣的东西。如果我在自己创建的窗口上使用xev,则会注册KEyPress和KeyRelease事件,我可以看到它们。但是,如果我使用xev的-id
开关监视另一个窗口并尝试在那里记录击键,则不会始终显示它们的KeyPress和KeyRelease事件。在某些事情发生时我似乎得到了PropertyNotify
个事件但我感兴趣的不是KeyPress
和KeyRelease
。
某些窗口按预期运行(例如gnome-terminal)。其他一些人没有(例如emacs-gtk)。
如何获取这些窗口的按键?
答案 0 :(得分:2)
键事件会转到具有焦点的窗口,该窗口并不总是具有焦点的窗口。当我尝试在我的firefox窗口上使用xev
时,关键事件会转到其中一个不可查看的子节点(相对左上角为(-1,-1),大小为(1,1)。
您可以使用XGetInputFocus()
找出哪个窗口具有焦点。