2011-11-08 8 views
1

私は、Xの下にあるウィンドウのキーストロークをキャプチャし、OSDなどを使って画面に表示する小さなアプリケーションを作成しようとしています。アイデアはスクリーンキャストなどのためにそれを使用することです。XウィンドウのKeyPressイベント

私はxevで手術を試みたが、うまく動作するようになったが、面白いことに気づいた。私自身が作成するウィンドウでxevを使用すると、KEyPressイベントとKeyReleaseイベントが登録され、それらを見ることができます。しかし、xevに-idスイッチを使用して別のウィンドウを監視し、そこにキーストロークを記録しようとすると、KeyPressイベントとKeyReleaseイベントが常に表示されるわけではありません。

いくつかのウィンドウは期待どおりに動作します(例:gnome-terminal)。他の人はしません(emacs-gtkなど)。

これらのウィンドウのキーストロークを取得するにはどうすればよいですか?

答えて

2

キーイベントは、フォーカスを持っているウィンドウに移動しますが、必ずしもフォーカスがあるとは限りません。私のfirefoxウィンドウでxevを使用しようとすると、キーイベントは視聴不可能な子どもたち(相対左上の(-1、-1)、サイズ(1,1))に移動します。

XGetInputFocus()どのウィンドウにフォーカスがあるか調べる

+0

興味深いのは、「Alt-Tab」を使ってEmacsウィンドウにフォーカスを当てると、イベントを受け取ったように見えます。マウスをマウスで動かすと、 –

+1

私はそれが 'XSetInputFocus'となると思います。 –

+0

プログラムで、' XSetInputFocus'を使用します。 –