(por todos significa hacer re-etiqueta con la tecnología relevante: No sé cuáles son :)Windows: ¿cómo obtener una lista de todas las ventanas visibles?
que probablemente vienen después con preguntas más detalladas sobre los detalles específicos, pero por ahora Estoy tratando de comprender el "panorama general": estoy buscando una manera de enumerar "ventanas visibles reales" en Windows. Por "ventana visible real" quiero decir exactamente eso: lo que un usuario llamaría una "ventana". Necesito una forma de obtener una lista de todas estas ventanas visibles, en orden Z.
Tenga en cuenta que I do realmente necesito hacer eso. Ya lo hice en OS X (donde es un verdadero dolor de cabeza, especialmente si desea soportar OS X 10.4, porque OS X no tiene la conveniente API de Windows) y ahora tengo que hacerlo en Windows.
He aquí un ejemplo, supongamos que hay tres ventanas visibles en la pantalla, así:
+------------------------------------------+
| |
| +=============+ |
| | | |
| | A +--------------------------+
| | | |
| C | | B |
| | +--------------------------+
| | | |
+-----------| |----------------+
| |
+-------------+
entonces necesito para volver una lista como esta:
windows B is at (210,40)
windows A is at (120,20)
windows C is at (0,0)
A continuación, si el el usuario (o el sistema operativo) lleva la ventana A al frente, se convierte en:
+------------------------------------------+
| |
| +=============+ |
| | | |
| | A |---------------------+
| | | |
| C | | B |
| | |---------------------+
| | | |
+-----------| |----------------+
| |
+-------------+
y yo get (idealmente) una devolución de llamada darme esta:
windows A is at (120,20)
windows B is at (210,40)
windows C is at (0,0)
Hacer esto en OS X requiere el uso de hacks increíblemente extraños (como que obliga al usuario a activar "Activar acceso para dispositivos de ayuda"!) pero Lo he hecho con OS X y funciona (bajo OS X, no pude obtener una devolución de llamada cada vez que se producen cambios en la ventana, entonces estoy sondeando, pero lo hice funcionar).
Ahora quiero hacer esto en Windows (realmente, no hay duda al respecto) y tengo algunas preguntas:
puede hacerse esto?
¿hay API Windows bien documentadas (y funcionan de acuerdo con sus especificaciones) que permiten hacer eso?
¿Es fácil registrar una devolución de llamada cada vez que cambia una ventana? (si se cambia de tamaño, se mueve, se lleva hacia atrás/frente o si aparece una nueva ventana emergente, etc.)
¿cuáles serían las trampas?
Sé que esta pregunta no es específico, por lo que he tratado de describir mi problema lo más claramente posible (incluyendo el arte ASCII agradable para el que puede upvote esto): por ahora estoy mirando el panorama". Quiero saber qué hace eso bajo Windows.
preguntaBono: imagina que había necesidad de escribir una pequeña .exe escribir los nombres de las ventanas/posición/tamaño a un archivo temporal cada vez que hay un cambio de ventana en la pantalla, ¿cuánto tiempo un programa de este tipo será aproximadamente en su idioma de elección y por cuánto tiempo necesitarías escribirlo?
(una vez más, estoy tratando de conseguir el "cuadro grande" para entender lo que está en juego aquí)
nadie? Ya + 1 voto positivo y 1 favorito ... :) – NoozNooz42
Bueno, supongo que comenzaría con FindWindowEx para enumerar todas las ventanas en orden Z y luego usar GetWindowLong para obtener el estilo de ventana. Obviamente, solo consideraría Windows con WS_VISIBLE, y quizás WS_CAPTION o algo así. – Luke
¿Es .net framework una opción? Tengo una solución simple para esto, toma como diez segundos. – Cyclone