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
.
Pero todo lo demás que quieres hacer es algo más laborioso....pero no muy complicado
.
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
.
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
.
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
.
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
.
Nota: Puedes marcar tú esas opciones de las que te he hablado antes en el registro....pero eso es otra historia
.
Puede que haya otras soluciones indirectas, pero es la primera que se me ha venido a la cabeza
.
Si quieres hacerlo así, intenta hacer algo de código y si te atascas postealo y dinos que te ocurre.
Saludos.