2010-12-23 22 views

Odpowiedz

4

Możesz użyć XQueryPointer(), aby uzyskać pozycję myszy. Następnie uzyskaj listę okien przy użyciu XQueryTree(). XQueryTree() zwraca listę okien w odpowiedniej kolejności, dzięki czemu możesz po prostu przechodzić przez wszystkie okna, dopóki nie znajdziesz takiego, którego ramka ograniczająca znajduje się pod wskaźnikiem, XGetWindowAttributes() da ci wszystko, czego potrzebujesz, aby rozgryźć ramkę. Nie jestem jednak pewien, co byś zrobił z oknami w kształcie.

Nie pracowałem z X11 przez kilka lat, więc może to być podejście raczej przyziemne, ale powinno działać. Też nie mam już książek O'Reilly X11, będziesz chciał wziąć w swoje ręce książkę z tej serii, jeśli zamierzasz pracować z materiałami X11 na niskim poziomie; Myślę, że cała seria jest już dostępna za darmo w Internecie w tych dniach.

+0

na przykład tutaj: http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_ACRO_SUP/XWINSYS.PDF –

+0

Myślałem o książkach Adrian Nye (XLib Programming Manual, XLib Reference Manual) O'Reilly, ta seria była moją biblią w moich dniach X11/Motif. –

3

Nie programowałem X11 przez ponad dekadę, więc wybaczcie, jeśli źle zrobię.

Uważam, że można rejestrować zdarzenia ruchów myszy w oknach. Jeśli zajmujesz się takim zdarzeniem, przechowując uchwyt okna w jakiejś zmiennej lub innym, a następnie obsługując zdarzenie, aby nie przenikał on drzewa, wtedy w momencie, w którym chcesz zidentyfikować okno, możesz po prostu zapytać zmienną.

To jednak zadziała tylko wtedy, gdy mysz znajduje się nad oknem, do którego zarejestrowałeś odpowiedni program obsługi zdarzeń, więc nie będziesz wiedział o oknach należących do innych aplikacji - chyba że istnieje sposób na rejestrację zdarzeń na innych ludziach okna, które mogą być możliwe.

Zaletą drugiej odpowiedzi jest to, że nie trzeba przechodzić przez całe drzewo. Wadą jest to, że musisz poradzić sobie z wieloma zdarzeniami ruchu myszy i może nie działać, aby znaleźć okna innych osób.

Sądzę, że mogą również występować zdarzenia myszy i zdarzeń opuszczania myszy, co zmniejszy ilość wymaganego przetwarzania.