2011-11-08 132 views
1

我正在嘗試編寫一個小應用來捕獲X下的窗口的擊鍵,然後使用OSD或其他東西將它們顯示在屏幕上。這個想法是將它用於屏幕錄像和類似的東西。X窗口的KeyPress事件

我在xev上試過了一些手術,並且它能夠正常工作,但後來發現了一些有趣的事情。如果我在自己創建的窗口上使用xev,則KEyPress和KeyRelease事件被註冊,我可以看到它們。但是,如果我使用-id開關爲xev監視另一個窗口並嘗試在那裏記錄擊鍵,則不會始終顯示KeyPress和KeyRelease事件。我似乎得到PropertyNotify事件當一些事情發生,但不是KeyPressKeyRelease這是什麼我感興趣的。

一些窗口像預期的那樣(如GNOME終端)。其他人不會(例如emacs-gtk)。

如何獲得這些窗口的擊鍵?

回答

2

重要事件轉到具有焦點的窗口,這並不總是看起來有焦點的窗口。當我嘗試我的Firefox窗口上使用xev,關鍵事件,去它的不可視的一個孩子(在(-1相對的上部的左,-1),大小(1,1)。

您可以使用XGetInputFocus()來找出哪個窗口有焦點

+0

有趣當我使用Alt-Tab將焦點集中到Emacs窗口時,它似乎接收到事件並且我可以跟蹤它們當我通過將鼠標懸停在它上面時,它不會,這很奇怪,我怎麼把焦點放到一個窗口中? –

+1

我想這會是'XSetInputFocus'。 –

+0

以'XSetInputFocus'爲編程方式。 –