Una cosa, una cosa, ¿pinchando una imagen y pulsando TAB y ENTER se hace? pues hombre, en AutoIT más que pérdida de tiempo eso seguramente es pero que mucho más fácil que buscar los enlaces de todos los amigos. Sólo tienes que hacer una búsqueda, la de la imagen, y lo de pulsar TAB y ENTER con AutoIT es trivial.
Como dice Chefito, probablemente en Explorer habrá alguna opción de "mostrar todos" para ver la lista completa, o algo así. Curiosa la diferencia entre navegadores, suele haberlas pero esta es curiosa.
De todas maneras si lo haces con AutoIT yo intentaría que no tuviera que ir con un navegador concreto, además de evitar sorpresas al script no obligas al usuario a usar algo concreto. Mira por donde yo por ejemplo uso Firefox, pero no todo el mundo lo tiene.
Lo mejor será usar la librería
IE.au3, o si te ves valiente más a pelo con el objeto COM
Shell.Explore. La alternativa es distribuir el add-on para Firefox con tu programa, y decir al usuario que se va a instalar si no lo tiene, y que elija...
Respecto a la otra cuestión, no es problema que el script se esté ejecutando a la vez que otros programas, sea el navegador o cualquier otra cosa, y también da lo mismo si esos otros programas están maximizados o no, o cuál está en primer plano. Estás acostumbrado a tener varios programas ejecutándose a la vez en Windows, para eso es multitarea, y los programas de AutoIT no son especiales en esto (¡menos mal!).
Lo que tiene que hacer el script es entrar en un bucle repetitivo donde estés esperando alguna acción o evento (como el maximizado de Firefox, por ejemplo).
Mira, te pongo un ejemplo, abajo lo explico:
Código: Seleccionar todo
$Clase = "MozillaUIWindowClass"
$ClaseBusq = "[CLASS:" & $Clase & "]"
;Esperamos a que esté abierta
WinWait($ClaseBusq)
$hVent=WinGetHandle($ClaseBusq)
MsgBox(0, "Cazada", "Ventana Encontrada")
;Ya está abierta, ahora esperamos en un bucle a que esté maximizada
While NOT BitAND(WinGetState($hVent), 32)
Sleep(20)
WEnd
MsgBox(0, "Cazada", "Ventana MAXIMIZADA")
Este programa espera hasta que haya una ventana de navegador Firefox (no necesariamente activa) y cuando la encuentra espera a que se maximice. Nuestro script no tiene que estar "activo", se está ejecutando en segundo plano.
Para buscar la ventana buscamos su clase, para Firefox es
MozillaUIWindowClass, si alguien no lo tiene y quiere usar por ejemplo el notepad, pues que ponga
$Clase = "Notepad". Por cierto, estas cosas las he averiguado con la herramienta
Au3Info que viene con AutoIt.
Si quieres usar una ventana Firefox en concreto tendrás que usar otro modo de identificar la ventana, como el texto del título de la misma.
Además de lo que te decía del bucle repetitivo, que también vemos luego, AutoIt tiene algunos comandos que "esperan a que ocurran cosas". Por ejemplo
WinWait espera a que la ventana especificada exista, si ya existe finaliza inmediatamente. Pero mientras no exista ahí estará esperando, él solito, no tenemos que hacer nada.
Hay otros comandos parecidos, como
WinWaitActive, (espera que esté activa),
WinWaitNotActive (espera a que NO esté activa),
WinWaitClose (espera a que NO exista). Por cierto, todas estas funciones tienen un parámetro de time-out, es decir, puedes decir que por ejemplo se esperen como mucho 30 segundos, para que no se quede esperando para siempre.
Para no estar siempre buscando con el método del título o la clase, en cuanto la encuentro me guardo su manejador de ventana de Windows (con
WinGetHandle), eso hará futuros accesos mucho más rápido, pues en vez de decirle "búscame una ventana con este título o clase" le decimos "coge directamente esta ventana".
Después viene un bucle que espera la maximización.
Es un bucle
While, esto ejecuta lo que tiene dentro mientras se cumpla la condición. Así que decimos "mientras no esté maximizado te esperas".
Eso en AutoIT se ve con
WinGetState, que según el numerito que devuelve te dice si está maximizada, minimizada, visible, etc. Como realmente no es un número para cada caso sino que activa bits, hay que mirarlo con
BitAND, tal como se puede ver en el ejemplo en la ayuda.
El Sleep es para que nuestro programa realmente "espere", si no lo ponemos estará ejecutándose tan rápidamente, mirando el
WinGetState tantas veces por segundo, que colapsará la CPU. Con una simple espera de 20 milisegundos entre cada comprobación, a pesar de ser mucho (50 veces por segundo está bien ¿no?) el consumo de CPU me baja a 0%, es decir, insignificante.
El bucle se puede hacer más genérico, aunque menos compacto. Una idea es hacer un bucle infinito, dentro del bucle comprobamos la condición y si ésta se cumple abortamos el bucle. Esta manera permite comprobar condiciones mucho más complejas (por ejemplo que requieran varias líneas de código), y muchas condiciones simultáneamente. En nuestro caso quedaría asi:
Código: Seleccionar todo
While True
If BitAND(WinGetState($hVent), 32) Then
MsgBox(0, "Cazada", "Ventana MAXIMIZADA")
ExitLoop
EndIf
Sleep(20)
WEnd
Al hacer
While True, como lógicamente True por definición siempre es cierto, el
While se ejecuta continuamente. Luego comprobamos la condición con un IF, y si ésta se cumple abortamos el bucle infinito con
ExitLoop (así que no era tan infinito, si eso os había asustado
)
Espero que sirva de ayuda el mini-tutorial, a ver si te anima a hacer más cositas en AutoiT. Sobre lo que decías de mirar documentación, si no te asusta el inglés lógicamente la mejor fuente es la propia ayuda del lenguaje. ¡Suerte!