2010-12-23 23 views

risposta

4

È possibile utilizzare XQueryPointer() per ottenere la posizione del mouse. Quindi ottieni una lista delle finestre usando XQueryTree(). XQueryTree() restituisce l'elenco delle finestre nel giusto ordine z in modo da poter scorrere tutte le finestre fino a trovare quello il cui riquadro di delimitazione è sotto il puntatore, XGetWindowAttributes() ti darà tutto il necessario per capire il riquadro di delimitazione. Non sono sicuro di cosa faresti con le finestre sagomate.

Non ho lavorato con X11 per alcuni anni, quindi questo potrebbe essere un approccio piuttosto goffo ma dovrebbe funzionare. Inoltre non ho più i miei libri di O'Reilly X11, vorrai mettere le mani sul libro di una di quelle serie se lavorerai con materiale X11 di basso livello; Penso che l'intera serie sia disponibile gratuitamente online in questi giorni.

+0

per esempio qui: http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_ACRO_SUP/XWINSYS.PDF –

+0

Stavo pensando ai libri di Adrian Nye (XLib Programming Manual, XLib Reference Manual) pubblicato da O'Reilly, quella serie è stata la mia bibbia nei miei giorni X11/Motif. –

3

Non ho programmato X11 per oltre un decennio, quindi perdonami se ho sbagliato.

Credo che sia possibile registrarsi per eventi di movimento del mouse su Windows. Se gestisci tale evento memorizzando l'handle della finestra in una variabile o in un'altra, e quindi gestendo l'evento in modo che non percoli lungo la struttura, al momento in cui desideri identificare la finestra puoi semplicemente eseguire una query sulla variabile.

Tuttavia, ciò funzionerà solo quando il mouse si trova su una finestra per cui è stato registrato un gestore di eventi adatto, quindi non si conoscono le finestre appartenenti ad altre applicazioni, a meno che non vi sia un modo per registrarsi per eventi su altre persone finestre che possono essere possibili.

Il vantaggio rispetto all'altra risposta è che non è necessario attraversare l'intero albero. Lo svantaggio è che devi gestire molti eventi di movimento del mouse e potrebbe non funzionare per trovare le finestre di altre persone.

Credo che potrebbero esserci anche eventi di inserimento e di spostamento del mouse che ridurrebbero la quantità di elaborazione richiesta.