Página 1 de 1

minimizar ventana sin tener su nombre

Publicado: 23 Dic 2009, 02:12
por Toledo
hola tengo una duda , es posible minimizar una ventana de firefox la cual no tengo el nombre concreto , y luego efectuar sobre ella un control send mientras que esta minimizada ? imaginemos que es www.autoit.com , segun en que parte de la pagina estemos va a tener un nombre distinto cada ventana ,por ejemplo:

Autoit en Español (www.autoit.es) * Publicar un nuevo tema - Mozilla firefox
Autoit en Español (www.autoit.es) * Pagina principal - Mozilla firefox
Autoit en Español (www.autoit.es) * Ver foro - Autoit en Español - Mozilla firefox

lo que se ve es que Autoit en Español (www.autoit.es * ) y - Mozilla firefox siempre se repite en todas las ventanas de www.autoit.com.
Si tubiera esas tres ventanas del ejemplo abiertas ,abria alguna manera de minimizar nose , Autoit en Español (www.autoit.es) * Pagina principal - Mozilla firefox pero sin que yo sepa que se llama asi.
o buscar algo de referencia

medio complicado lo veo ,pero quien sabe capas se pueda .

Re: minimizar ventana sin tener su nombre

Publicado: 23 Dic 2009, 09:11
por Ximorro
¿Cuál es el criterio para elegir la ventana a minimizar? Eso es lo que tienes que trasladar al programa.
El caso es que debes distinguir de alguna manera qué ventana quieres minimizar, ¿qué tiene de especial para que quieras minimizarla?

Los comandos que buscan ventanas, además del nombre, también pueden buscar texto dentro de ellas, quizás con eso las distingas.
En el caso de minimizar, se haría con WinSetState(Titulo, Texto, @SW_MINIMIZE), donde en título yo pondría "Autoit en Español (www.autoit.es)" (la parte común) para restringir la búsqueda. En el parámetro de texto puedes poner algún texto de la ventana que la distinga de las demás.
Lo del texto no siempre es fiable 100%, funciona mejor con textos de controles como etiquetas, botones, cajas de texto, etc... tratándose de páginas web quizás toque tomar la dirección de la ventana en concreto, descargar el html y analizarlo...

Otra opción es la interacción con el usuario, quizás quieres minimizar la ventana activa en ese momento (muy fácil) o la que lleva más tiempo sin estar activa (para eso hay que estar monitorizándolas)...

Si acaso coméntanos cómo se elige la ventana a minimizar, a ver si podemos trasladar eso a AutoIt...

Respecto a ControlSend tengo malas noticias. Es cosa de suerte pero puede que no funcione cuando la ventana está minimizada, en la ayuda incluso recomiendan que el control tenga el foco...

Saludos

Re: minimizar ventana sin tener su nombre

Publicado: 23 Dic 2009, 11:17
por Toledo
Hola , ya logre solucionar el tema de minimizarla gracias :) ,
pero no logre entender lo que me decias de control send.
porque intente hasta poniendo el nombre completo tomando como ejemplo google y tampoco me hace nisiquiera los TABs

ControlSend("Google - Mozilla Firefox", "", "", "{TAB}{TAB}{TAB}{TAB}")

en firefox que ahi que hacer para que funcione el control send?

Re: minimizar ventana sin tener su nombre

Publicado: 24 Dic 2009, 11:48
por Chefito
Mira mejor la ayuda. Necesitas poner obligatoriamente el parámetro controlID (el identificador del control donde vas a mandar esa combinación de teclas). Tu lo has dejado en blanco. Tendrías que buscar el identificador del control y ponerlo. Esto se puede hacer con el programa espia de ventanas que trae autoit llamado "AutoIt Window Info" y señalando ese control. En el índice de la ayuda pon "controls" sin comillas y mira como se puede poner este parámetro.

Otra pregunta, pero que quieres hacer? mandar esa combinación de teclas a un control del programa firefox o a un control dentro de una página web?
Es que no es lo mismo. Si lo que quieres es trabajar con controles dentro de una página web utilizando el firefox te recomiendo que te bajes esta udf y mires sus funciones: http://www.autoitscript.com/forum/index ... ffau3&st=0

Saludos.

Re: minimizar ventana sin tener su nombre

Publicado: 24 Dic 2009, 18:33
por Toledo
hola chefito hize lo que me dijistes de buscar el id y me quedo haci

WinSetState("Google - Mozilla Firefox","", @SW_MINIMIZE)
ControlSend("Google - Mozilla Firefox","", "MozillaUIWindowClass","www.autoit.es")

pero luego de minimizar no pasa nada :/

Re: minimizar ventana sin tener su nombre

Publicado: 25 Dic 2009, 21:03
por Nahuel
"MozillaUIWindowClass" es la clase de la ventana del Firefox, no de un control.

Leé el último post de Chefito. Repito la pregunta: ¿qué intentás hacer? ¿Manejar controles de la ventana de firefox o de una página web?

Si visitas el post que dejó chefito (bajando FF.au3 e instalando el addon MozRepl (necesario para manejar firefox)) podrás hacer lo que intentas hacer en esos ejemplos de una forma mucho más limpia y prolija. Una vez que instales el addon, vas a herramientas->MozRepl->Start. Ahí iniciás el addon y podrás manejar Firefox. Acá te hice el ejemplo que querías hacer:

Código: Seleccionar todo

#Include <FF.au3>

_FFStart("http://www.google.com.ar/")

If _FFIsConnected() Then

	$sInput = _FFObjGet("q", "name")
	_FFObj($sInput, "value", "www.autoit.es")
	
	$sBuscar = _FFObjGet("btnG", "name")
	_FFClick($sBuscar)

EndIf
Tiene un pequeño problema que tiene que ver con el nuevo diseño de la pág. de Google. Todos habrán notado el efecto "fade-in" que han agregado. Para que el script no quede colgado, necesitan mover el mouse dentro del explorador para provocar el fade-in y hacer que MozRepl notifique el fin de carga de la página y el script pueda continuar. Quizá pueda arreglarse inhabilitando JavaScript.


Y acá uno que encontré en el foro, que demuestra a grandes rasgos lo que podés hacer:

Código: Seleccionar todo

#include <FF.au3>

_FFStart("http://www.google.com.ar/")

If _FFIsConnected() Then
	Sleep(2000)
	_FFAction("presentationmode", True)
	Sleep(2000)
	_FFOpenURL("http://www.google.com")
	Sleep(2000)
	_FFAction("back")
	_FFAction("presentationmode", False)
	Sleep(2000)
	_FFOpenURL("chrome:bookmarks")
	Sleep(2000)
	_FFAction("alert", "Bye bye ...")
	_FFQuit()
EndIf
Si no es eso lo que querés hacer, entonces necesitás ser un poco más especifico.
Saludos.

Re: minimizar ventana sin tener su nombre

Publicado: 26 Dic 2009, 01:20
por Toledo
hola nahuel , muchas gracias por responder :)
eso que me has puesto me serviria pero el problema es que mas gente utilizaria este programa ,y no creo que quieran estar intalando en firefox el addon MozRepl.
yo lo que quiero hacer es manejar firefox , no la pagina web que esta adentro :).sin instalar el FF.au3 ,no ahi manera de poder minimizar la ventana de firefox y por ejemplo cambiar de la pagina www.google.com a www.autoit.es ?

Re: minimizar ventana sin tener su nombre

Publicado: 26 Dic 2009, 02:22
por Nahuel
Pues con FF.au3 sería muy fácil :P El problema es que la ventana de Firefox es un tanto... especial. Por lo que va a ser muy improlijo e inefectivo hacerlo como querés.

¿Por qué tiene que ser en Firefox? seguro la tarea se podría hacer más fácil y efectiva con IE, pues es más sencillo automatizarlo. Sería inclusive mejor dado que tu script será utilizado en otras computadoras.

Esto es lo único que puedo hacer. No funciona con la ventana minimizada, pues ControlSend necesita foco para funcionar con esta ventana. Luego de hacer que FF navegue a esa dirección, puedes minimizarla... pero seguro no es lo que querés.

Código: Seleccionar todo

$s_FF = @ProgramFilesDir & "\Mozilla Firefox\firefox.exe"
$ci_FF = "[CLASS:MozillaUIWindowClass]" 
$ci_FF_int = "[CLASSNN:MozillaWindowClass1]"

if Not WinExists($ci_FF) Then Run($s_FF)
WinWait($ci_FF)
Sleep(2000); Darle tiempo que termine de abrir
ControlFocus($ci_FF,"",$ci_FF_int)
ControlSend($ci_FF,"",$ci_FF_int,"!{d}")
ControlSend($ci_FF,"",$ci_FF_int,"www.autoit.es{enter}")
WinSetState($ci_FF,"",@SW_MINIMIZE)