(da parte di tutti significa fare ri-tag con la tecnologia in questione: Non so quali sono :)Windows: come ottenere un elenco di tutte le finestre visibili?
Io probabilmente venire più tardi con domande più dettagliate, circa i dettagli specifici, ma per ora mi Sto cercando di cogliere il "quadro generale": sto cercando un modo per enumerare "finestre reali visibili" su Windows. Con "finestra reale visibile" intendo proprio questo: ciò che un utente chiamerebbe una "finestra". Ho bisogno di un modo per ottenere un elenco di tutte queste finestre visibili, in ordine Z.
Si noti che I do ha davvero bisogno di farlo. L'ho già fatto su OS X (dove è un vero mal di testa da fare, specialmente se vuoi supportare OS X 10.4, perché OS X non ha una comoda API di Windows) e ora ho bisogno di farlo sotto Windows.
Ecco un esempio, supponiamo che ci sono tre finestre visibili sullo schermo, in questo modo:
+------------------------------------------+
| |
| +=============+ |
| | | |
| | A +--------------------------+
| | | |
| C | | B |
| | +--------------------------+
| | | |
+-----------| |----------------+
| |
+-------------+
poi ho bisogno di tornare una lista come questa:
windows B is at (210,40)
windows A is at (120,20)
windows C is at (0,0)
Poi, se il l'utente (o il sistema operativo) porta la finestra A in primo piano, diventa:
+------------------------------------------+
| |
| +=============+ |
| | | |
| | A |---------------------+
| | | |
| C | | B |
| | |---------------------+
| | | |
+-----------| |----------------+
| |
+-------------+
E I ottenere (idealmente) un callback dandomi questo:
windows A is at (120,20)
windows B is at (210,40)
windows C is at (0,0)
Facendo questo sotto OS X richiede l'uso di hack incredibilmente strane (come mandato l'utente di attivare "Abilita l'accesso a dispositivi assistive"!), ma ho L'ho fatto sotto OS X e funziona (sotto OS X, non sono riuscito a ottenere una richiamata ogni volta che si verificano alcune modifiche alle finestre, quindi sto eseguendo il polling, ma ho avuto modo di funzionare).
Ora io voglio fare questo sotto Windows (davvero, non c'è dubbio su di esso) e ho un paio di domande:
si può fare?
ci sono API Windows ben documentate (e funzionanti secondo le loro specifiche) che consentono di farlo?
è facile registrare una richiamata ogni volta che cambia una finestra? (se viene ridimensionato, spostato, riportato in primo piano o se viene visualizzata una nuova finestra, ecc.)
cosa sarebbero i trucchi?
So che questa domanda non è specifico, ed è per questo che ho cercato di descrivere il mio problema più chiaramente possibile (compreso piacevole arte ASCII per il quale è possibile upvote questo): per ora sto guardando la grande immagine". Voglio sapere che cosa comporta una cosa del genere in Windows.
domandaBonus: immaginate avresti bisogno di scrivere un piccolo exe scrivendo le finestre nomi/posizione/dimensione per un file temporaneo ogni volta c'è un cambiamento finestra sullo schermo, quanto a lungo sarebbe un programma del genere essere approssimativamente nella vostra lingua di scelta e per quanto tempo avresti bisogno di scriverlo?
(ancora una volta, sto cercando di ottenere il "grande quadro" per capire che cosa è al lavoro qui)
nessuno? Già +1 upvote e 1 preferito ... :) – NoozNooz42
Bene, immagino che inizieresti con FindWindowEx per enumerare tutte le finestre nell'ordine Z e quindi utilizzare GetWindowLong per ottenere lo stile della finestra. Ovviamente considereresti solo Windows con WS_VISIBLE e forse WS_CAPTION o qualcosa del genere. – Luke
Is .net framework un'opzione? Ho una soluzione semplice per questo, dura circa dieci secondi. – Cyclone