X11サーバーの上にカーソルがあるトップウィンドウを取得するにはどうすればよいですか?X11で現在カーソルの上にカーソルがあるウィンドウを取得するにはどうすればよいですか?
ウィンドウがアクティブである必要はありません(選択されている、開いている、何でも)。その上にカーソルが浮かなければなりません。
ありがとうございます。
X11サーバーの上にカーソルがあるトップウィンドウを取得するにはどうすればよいですか?X11で現在カーソルの上にカーソルがあるウィンドウを取得するにはどうすればよいですか?
ウィンドウがアクティブである必要はありません(選択されている、開いている、何でも)。その上にカーソルが浮かなければなりません。
ありがとうございます。
XQueryPointer()
を使用すると、マウスの位置を取得できます。次に、XQueryTree()
を使用してウィンドウリストを取得します。 XQueryTree()
は、境界ボックスがポインタの下にあるものを見つけるまですべてのウィンドウをループすることができるように、ウィンドウリストを適切なz順に返します。XGetWindowAttributes()
は、境界ボックスを把握するのに必要なものすべてを提供します。私はあなたが形作られた窓で何をするか分かりません。
私は数年前からX11で作業していませんでしたので、これはややこしいアプローチかもしれませんが、うまくいくはずです。私もO'Reilly X11の本をもう所有していないので、あなたは低レベルのX11のもので作業しようとしているのであれば、そのシリーズの本1本に手を入れたいと思うでしょう。私は、このシリーズ全体が、最近、無料でオンラインで利用できると思います。
私は十年以上X11をプログラムしていないので、これが間違っている場合は私を許してください。
私はあなたのウィンドウでマウスの動きのイベントに登録することができると信じています。そのようなイベントをWindowsのハンドルを変数などに格納してから、ツリーを透かしないようにイベントを処理すると、ウィンドウを識別したいときに変数を照会することができます。
これは、適切なイベントハンドラを登録したウィンドウの上にマウスがある場合にのみ機能するため、他のアプリケーションに属するウィンドウについてはわかりません。他の人のイベントに登録する方法がない限り可能な窓があります。
他の回答よりも利点は、ツリー全体を走査する必要がないということです。欠点は、多数のマウス移動イベントを処理する必要があり、他の人のウィンドウを見つけることができないことです。
私はマウス入力とマウス離脱イベントもあり、必要な処理量が減ると考えています。
例:http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_ACRO_SUP/XWINSYS.PDF –
Adrian Nyeの書籍(XLibプログラミングマニュアル、XLibリファレンスマニュアル)は、 O'Reilly、そのシリーズは私のX11/Motif時代の私の聖書でした。 –