Trae la ventana al frente (focus)

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
josh
Mensajes: 1
Registrado: 12 Feb 2011, 15:34

Trae la ventana al frente (focus)

Mensaje por josh »

Buenas;

He intentado hacer un script con autoit para instalar IE7.
En principio todo me funciona bien, pero si en mitad de la instalacion de IE7 abro una carpeta o cualquier otra aplicacion, la ventana de instalacion de IE pasa a segundo plano y se estanca. Cuando con el raton, traigo al frente la ventana de instalacion, el script se lleva a cabo con normalidad.

Como se puede traer al frente en cualquier momento la ventana de instalacion que tengo indicada en el script?

He probado con winActivate pero no funciona

Este es el codigo que tengo con el que funciona en el caso que no se traiga al frente ninguna otra ventana/aplicacion.

Código: Seleccionar todo

WinWaitActive("Instalar Windows Internet Explorer", "&Siguiente >")
Send("{ENTER}")
WinWaitActive("Instalar Windows Internet Explorer", "&Acepto")
Send("{A}")
WinWaitActive("Instalar Windows Internet Explorer", "&Siguiente >")
Send("{ENTER}")
WinWaitActive("Instalar Windows Internet Explorer", "Reiniciar a&hora (recomendado)")
Send("!h")
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2091
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Mensaje por BasicOs »

Puede ser que no identifique la ventana. Prueba a acortar el nombre de la ventana o usar otra de la opciones de uso q trabaja directamente con el identificador interno. Con opt.
TAMBIEN puede usar au3info para ver el titulo exacto y/o el texto dentro d la ventana.
Saludos
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Trae la ventana al frente (focus)

Mensaje por Ximorro »

Casiiiiiiiiiiiiii ;-)

Es que WinWaitActive NO activa la ventana, sino que se espera a que la actives tú.

Sí que hay que hacerlo con WinActivate, que es lo que la activa, el problema es que no existe un WinWAITActivate, que se espere hasta que esté activa, pero podemos crearla nosotros juntando las otras dos.

Puedes usar por ejemplo esto:

Código: Seleccionar todo

Func _WinWaitActivate($titulo, $texto="", $timeout=0)
	WinActivate($titulo, $texto)
	WinWaitActive($titulo, $texto, $timeout)
EndFunc
Le he puesto un tercer parámetro opcional como time-out, igual que tiene WinWaitActive. Le he puesto como valor por defecto un cero, que es lo que hace que espere indefinidamente, eso no está documentado pero por las pruebas que he hecho me ha funcionado.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Trae la ventana al frente (focus)

Mensaje por Ximorro »

Estoy pensando que igual este no es tu problema. Esto de antes es para que se espere a que la ventana está activa, pero a lo mejor tu problema es que aún ¡no existe!

Otra opción es esperar a que la ventana exista, y que cuando eso ocurra la active. En este caso sería así:
(Le pongo WaitExistActiva, esperar-existir-activar, para distinguirlo de la anterior, pero el nombre anterior también le va bien, mientras no uses las dos a la vez en el mismo programa no hay problema en usar el mismo nombre)

Código: Seleccionar todo

Func _WinWaitExistActivate($titulo, $texto="", $t=0)
	WinWait($titulo, $texto, $t)
	WinActivate($titulo, $texto)
EndFunc
Me parece que en tu caso este modelo de WinWaitActivate te irá mejor, porque sospecho que lo que pasa es que al darle por ejemplo al botón "siguiente", la nueva ventana no aparece instantáneamente con lo que hacer enseguida un WinActivate no funciona, pues no hay nada que activar. Es decir, el problema no sería que hubiera perdido el foco (que es para lo que serviría la función anterior) sino que aún no existe, así que en este segundo método primero esperamos a que aparezca y entonces la activamos antes de hacer el Send.

OTRO MÉTODO:
Por cierto, que hay otra manera de trabajar con las ventanas que NO requiere que estén activas. Se hace mandando comandos directamente a los controles, mírate las funciones Controlxxx, por ejemplo ControlClick para pulsar botones o ControlSend para mandar texto a una caja de texto.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Responder