mercoledì, luglio 09, 2008

Aggiornamento su firefox 3 e la macro

Dopo aver cambiato PC, alcuni problemi che si presentavano con il precedente, sono svaniti. Parlo della presenza di finestrine che faticano ad andarsene. Col nuovo le finestre sono solo due o tre al massimo. Si presenta pero' una lieve differenza nell'ordine, per cui la macro precedente resta bloccata per un po' prima di fare il suo lavoro perche' aspetta per prima la finestra di autenticazione e solo in seguito quella di ripristino sessione. Nel frattempo e' cambiata anche la lingua del browser (mi ha scaricato in automatico quello in italiano e non trovavo velocemente quello in inglese e cosi' ho tenuto quello italiano :-). Di conseguenza inserisco qui la nuova macro che fa un loop continuo su due tipi di finestrine e quindi l'ordine di apparizione non conta. Il difetto di questa macro puo' essere che se e' molto lento ad apparire il browser, il loop termina prima di aver fatto il suo lavoro. Si puo' rimediare rilanciandolo, oppure, se il problema e' costante, modificando i valori interni aumentando ad esempio il numero di loop o aumentando (ma non troppo) il delay di ogni attesa finestra. Sotto il codice aggiornato.

;--------------------------------------------------------------
; Main process
;--------------------------------------------------------------

process, Close, firefox.exe
Sleep 1000
run "C:\Program Files\Mozilla Firefox\firefox.exe"
Loop, 10
{
if attivaFocusFinestra("Autenticazione richiesta", 2, 200) == 1
SendInput {ENTER} ; inserire qui i dati eventuali di login

if (attivaFocusFinestra("Firefox - Ripristino sessione precedente", 2, 200)) == 1
Send, {ENTER} ; --- INVIO a eventuale richiesta ripristino sessione precedente da parte di firefox
}
; --- FINE SEZIONE SBLOCCO ------------------------------------

;--------------------------------------------------------------
; Funzione di attesa finestra a numero tentativi specificabile
; (tipico = 20) e delay [ms] (tipico 1000) specificabile
;--------------------------------------------------------------

attivaFocusFinestra(nomeFinestra, tentativi, delay)
{
WinActivate, %nomeFinestra%,
Loop, %tentativi%
{
IfWinNotActive, %nomeFinestra%
{
Sleep %delay%
WinActivate, %nomeFinestra%,
}
else
return 1
}
return 0
}