2010-12-23 11 views

Antwort

4

Sie können XQueryPointer() verwenden, um die Mausposition zu erhalten. Dann rufen Sie eine Fensterliste mit XQueryTree(). XQueryTree() gibt die Fensterliste in der richtigen Z-Reihenfolge zurück, so dass Sie alle Fenster durchlaufen können, bis Sie ein Fenster mit dem Begrenzungsrahmen unter dem Zeiger finden. XGetWindowAttributes() gibt Ihnen alles, was Sie zum Auffinden des Begrenzungsrahmens benötigen. Ich bin mir nicht sicher, was Sie mit geformten Fenstern tun würden.

Ich habe seit ein paar Jahren nicht mit X11 gearbeitet, also könnte das ein ziemlich klobiger Ansatz sein, aber es sollte funktionieren. Ich habe auch meine O'Reilly X11-Bücher nicht mehr, Sie werden das erste Buch dieser Serie in die Hände bekommen, wenn Sie mit Low-Level-X11-Sachen arbeiten; Ich denke, dass die ganze Serie heutzutage kostenlos online verfügbar ist.

+0

zum Beispiel hier: http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_ACRO_SUP/XWINSYS.PDF –

+0

Ich dachte an die Adrian Nye Bücher (XLib Programmierhandbuch, XLib Reference Manual) von veröffentlicht O'Reilly, diese Serie war meine Bibel in meinen X11/Motif-Tagen. –

3

Ich habe X11 seit über einem Jahrzehnt nicht programmiert, also vergib mir, wenn ich das falsch verstehe.

Ich glaube, dass Sie für Mausbewegungsereignisse auf Ihren Fenstern registrieren können. Wenn Sie ein solches Ereignis behandeln, indem Sie das Fenster-Handle in einer Variablen speichern und das Ereignis dann so behandeln, dass es die Struktur nicht durchdringt, können Sie zu dem Zeitpunkt, zu dem Sie das Fenster identifizieren möchten, einfach die Variable abfragen.

Dies funktioniert jedoch nur, wenn sich die Maus über einem Fenster befindet, für das Sie einen geeigneten Event-Handler registriert haben. Sie werden also keine Fenster anderer Anwendungen kennen - es sei denn, es gibt eine Möglichkeit, sich für Ereignisse anderer Personen zu registrieren Fenster, die möglich sein können.

Der Vorteil gegenüber der anderen Antwort ist, dass Sie nicht den gesamten Baum durchlaufen müssen. Der Nachteil ist, dass Sie sehr viele Mausbewegungsereignisse verarbeiten müssen und es möglicherweise nicht funktioniert, um die Fenster anderer Leute zu finden.

Ich glaube, es gibt auch Mauseingabe und Maus verlassen Ereignisse, die die Menge der erforderlichen Verarbeitung reduzieren würde.