mercoledì, giugno 18, 2008

Firefox 3, e la macro

Ho scaricato e installato firefox 3. Tutto OK, ma nella rete su cui mi trovo, ho uno script per l'autenticazione e un proxy che richiede autenticazione. Questo genera delle antipatiche finestrelle che si aprono ogni volta che si attiva il browser.

La situazione e' comunque migliore rispetto a firefox 2 per due ragioni fondamentali: in primo luogo la barra di google (ammesso che fosse lei) non interferisce piu' con le autenticazioni e quindi la partenza del programma e' molto piu' rapida e soprattutto non escono finestre di autenticazione strampalate, cioe' con campi e bottoni di dimensioni strane, spesso minuscole per cui esce una finestra "nana" che e' impossibile far sparire perche' non presenta, appunto, ne' campi di immissione ne' bottoni utilizzabili (occorre il kill del processo); in secondo luogo le finestre di richiesta autenticazione, cosi' come accade per MS internet explorer, una volta immessi i dati la prima volta li mantengono le volte successive, per cui basta dare l'OK per effettuare il login.

Queste finestrine comunque non so per quale ragione ma sono piu' d'una: in teoria, come accade per MSIE, il login dovrebbe essere richiesto una sola volta nel momento in cui si cerca di uscire dalla intranet, mentre di fatto viene richiesto un login per lo script, e uno per la connessione al web e a volte una di queste finestre si nasconde dietro alla finestra del browser.
Un bel pasticcio: non so se dipenda da firefox, ma suppongo di si, e mi pare strano che una nuovissima release, per quanto migliorata, abbia questi strani comportamenti.

Dato che gia' il firefox precedente mi faceva impazzire, avevo creato una macro con autohotkey che faceva il kill del processo firefox, lo rilanciava, attendeva la partenza immetteva utente e password, dava OK ed eliminava le finestrelle fastidiose; nel caso il browser non partisse la macro si autoricaricava e quindi ricominciava la trafila killando firefox e rifacendo tutto.

Questo funzionava, ma era lento, e comunque a volte mi esasperava e interrompevo tutto (e, sigh, usavo MS internet explorer :-).

Adesso la situazione e' migliorata ma e' comunque necessario, come detto sopra, un procedimento automatico che eviti di premere bottoni a destra e a manca solo per attivare un programma. Quindi ho modificato (piuttosto profondamente) la macro che utilizzavo per il vecchio firefox.

Questa macro agisce in sintesi in questo modo (si capisce anche dal codice ma lo riassumo):
  • chiusura processo firefox nel caso sia attivo
  • attivazione di firefox
  • blocco input da tastiera
  • attivazione finestra richiesta autenticazione e conferma login
  • attivazione eventuale finestra di richiesta ripristino sessione precedente: se trovata pressione tasto ripristino
  • sblocco input da tastiera
  • attivazione e annullo finestra richiesta autenticazione se presente (2 volte perche' le finestre possono essere 2)
Questa macro agisce correttamente sia che venga lanciata con firefox gia' attivo sia nel caso non sia attivo. Firefox infatti si comporta in modo diverso nei due casi: quando non era attivo ci vuole un po' piu' tempo ad annullare le finestre. Tra l'altro se era gia' attivo spesso la finestra di autenticazione e' una sola. Gia', e' tutto molto empirico.

Ecco il codice (per utilizzarlo occorre fare un copia-incolla del codice dentro un file con estensione AHK... e avere autohotkey installato, ovviamente :-)
------------------------------

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

process, Close, firefox.exe
Sleep 1000
run "C:\Program Files\Mozilla Firefox\firefox.exe"

BlockInput On

Sleep 1000
if attivaFocusFinestra("Authentication Required", 20, 1000) == 1
SendInput {ENTER} ; se necessario inserire qui i dati di login (userid-pwd)
;else
; reload

BlockInput Off

; ------------------------------- SEZIONE PER SBLOCCARE FINESTRINE DI AUTENTICAZIONE
; --- sbloccare i doppioni eventuali di richiesta login,
; tentando l'attivazione della finestra "Authentication Required"
; e premendo ENTER. Nota il numero di loop qui sotto e' arbitrario
; e puo' essere adattato caso per caso, ad esempio aumentato se si vede che
; le finestre non vengono intercettate e eliminate, o diminuite nel caso
; si verificassero (improbabili) rallentamenti
Loop, 5
{
if attivaFocusFinestra("Authentication Required", 2, 200) == 1
SendInput {ENTER}

if (attivaFocusFinestra("Firefox - Restore Previous Session", 2, 200)) == 1
Send, {ENTER} ; --- INVIO a eventuale richiesta ripristino sessione
}
; ------------------------------- 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
}

------------------------------

1 commento:

prova ha detto...

ottima idea, prima o poi lo proverò!
BTW sto usando firefox 3 su ubuntu da qualche tempo...