Página 1 de 1

Control ventanas abiertas o minimizadas

Publicado: 12 Jun 2010, 10:09
por Fosforito
Control ventanas abiertas o minimizadas.
Me gustaría saber si se puede lograr con comodidad determinar las ventanas activas (abiertas o minimizadas) a los efectos de :
Seleccionar un archivo en una de ellas y mediante un atajo copiar dicho archivo en el resto de ventanas activas.

Gracias

Re: Control ventanas abiertas o minimizadas

Publicado: 12 Jun 2010, 12:36
por BasicOs
Hola,
puedes practicar con send() :smt023 como lo harias tu mismo (grabar las pulsaciones de teclas con el macroRecorder del Scite para generar el código)
f3 (buscar)
alt +t (todos)
escribir el nombre del fichero,
alt+f (cambiar la pantalla)
escribir el nombre del fichero para sombrearlo
Ctrl+C para copiarlo
WinActivate() y otras para activar la ventana (tienes que elegir en opciones de carpeta pon (mostrar la ruta completa en la barra del titulo)
y Ctrl+V..

No se si te vale esta manera "visual" pero hay muchas otras maneras como por ejemplo hacer un simple FileCopy(origen,destino,..), y copiarlo ..
Salu22:)

Re: Control ventanas abiertas o minimizadas

Publicado: 12 Jun 2010, 15:44
por Chefito
Puedes hacerlo directamente como dice BasicOs o Indirectamente. Por supuesto la forma directa es la más facil, pero tiene una pega que a mi nunca me ha gustado, y es que no puedes tocar el ordenador, ya que el script tiene que trabajar sobre objetos de la pantalla directamente, y si el usuario toca algo que no debe mientras se ejecuta el script puede cargarse su ejecución normal. Aunque en este caso el script lo haría bastante rápido.
Igualmente a mi se me ocurre una forma indirecta. La voy a exponer:

Hombre...saber las ventanas abiertas (visibles) es facil. Eso está en la ayuda, en el ejemplo de la función WinList :smt001 .
Pero todo lo demás que quieres hacer es algo más laborioso....pero no muy complicado :smt002 .

Primero tendrías que saber cuales son las ventanas explorer (que son las que habre el explorador). Para eso debes sacar todas las ventanas visibles con el ejemplo anterior. Luego coger los títulos de las ventanas que te da lo anterior (es el elemento 0 de la segunda dimensión del array) y sacar el nombre del proceso vinculado a cada ventana (en la ayuda, el ejemplo de la función _ProcessGetName). Sabiendo esto y que el proceso de una ventana explorador debe ser "explorer.exe", solamente tienes que comparar los nombres de procesos de las ventanas visibles que sacaste anteriormente con el nombre "explorer.exe". Si te da verdadero, estas son ventanas explorer y ya las tienes identificadas :smt003 .

Vale. También puedes hacer que cada vez que encuentre una ventana de este tipo, lea el contenido del control Edit1 con la función ControGetText. Este control es el que contiene el path del contenido (supuestamente una carpeta, unidad, etc) que te muestra la ventana. Teniendo este path ya puedes trabajar con filecopy o dircopy. OJO! Para tener el path entero en el Edit1 debes tener la opción de "mostrar dirección completa en la barra de direcciones" activada.
Otra posibilidad es tener activada "mostrar dirección completa en la barra de título", y te aparece el path completo en el título de la ventana, teniendo que evitarte algún paso que otro :smt003 .

Llegados a este punto tenemos la lista de ventanas explorer y los path del que muestran su contenido. Si quisiesemos saber el nombre del archivo que está seleccionado en una de estas ventanas tendríamos que utilizar la función ControlTreeView con el comando "GetSelected", el cual te da este nombre (el control donde el explorer muestra los archivos, directorios, etc es un TreeView). Te digo lo mismo que anteriormente, OJO! No tienes que tener seleccionada la opción "Ocultar las extensiones...", para así poder coger el nombre completo del archivo, aunque saber la extensión de un archivo sabiendo donde está es facil :smt001 .

Llegados a este punto ya sabemos las ventanas explorer, los path de cada ventana y el archivo seleccionado de la ventana que nos interesa (para saber la ventana que está activa utiliza la funcion WinActive). Pues sabiendo todo esto, donde se encuentra el archivo que quieres copiar y los destinos. Simplemente tienes que utilizar la función filecopy tantas veces como destinos para copiarlo haya :smt040 .

Nota: Puedes marcar tú esas opciones de las que te he hablado antes en el registro....pero eso es otra historia :smt005 .

Puede que haya otras soluciones indirectas, pero es la primera que se me ha venido a la cabeza :smt005 .

Si quieres hacerlo así, intenta hacer algo de código y si te atascas postealo y dinos que te ocurre.

Saludos.

Re: Control ventanas abiertas o minimizadas

Publicado: 21 Jun 2010, 14:33
por Fosforito
Replanteo mi pregunta.
Lo que yo necesito son las rutas de esas carpetas abiertas o activas.
Como dichas carpetas abiertas son variables en el tiempo de nada me sirve grabar manualmente esas carpetas.
Por otro lado estoy con Chefito en que si el script es en modo reproductor de un escenario de ventanas particular se puede perder foco por una alarma u cualquier otra incidencia que emerga durante el proceso.

Por lo tanto.
¿ De qué forma determino la ruta de las ventanas abiertas o dónde están almacenadas en el registro de windows dichas rutas ?

Luego ya vería la forma de crear variables de dichas rutas para poder acceder a las ventanas o carpetas activas del explorador. Creo que podría manejarlas posteriormente con un bat que estableza las variables y un ini con el código autoit.

Posteriormente cuando seleccione el icono o iconos dentro de una carpeta el script a crear debe poder activar un menú contextual autónomo que tenga como una de las opciones crear soft links en las rutas restantes definidas con el comando SET en el bat.

Gracias