mercoledì, febbraio 20, 2008

A volte firefox (con google toolbar) in windows XP si pianta quando viene lanciato. O meglio fa uscire la finestra di logon piccola e senza campi di input, e quindi e' inutilizzabile.
E' quindi necessario restartare tutto e sperare.
Siccome sono programmatore e fare sempre le stesse cose mi secca, ho fatto una procedura automatica che sega il processo e lo restarta (e fa pure il login :-). Quindi io con pochi tasti, se firefox non parte lo riesco ad avviare ugualmente senza perdere molto tempo. Per farlo uso una procedura scritta in un macrolinguaggio (autohotkey).
Tutto, comunque, dipende da quante volte firefox decide di piantarsi.
Una volta mi e' capitato che almeno per una decina o ventina di volte di seguito mi si presentasse la finestra di richiesta login inutilizzabile e quindi di veder rifare il kill e successivo reload, e anche di dover intervenire manualmente perche' a volte la finestra di login appariva mezza buona e mezza no, quindi la macro riconosceva il nome della finestra e pensando che fosse quella buona tentava il login, che ovviamente poi non funzionava. Il risultato e' che quella volta ho perso qualche minuto per riuscire a caricare firefox.
Ma la causa era che aveva appena fatto un aggiornamento automatico e quindi il reload era piu' lento e dato che la macro ha un timeout predfinito, vedendolo tardare lo ricaricava interrompendo il processo post-aggiornamento e creando cosi' un po' di confusione.
Risultato: dopo un aggiornamento di firefox, meglio usare la procedura manuale per caricarlo e avere un po' di pazienza se si pianta (... uhmmm magari disabilitando temporaneamente la barra di google finche' non termina il processo, va meglio....).
Ecco di seguito il codice "AutoHotKey" della macro, che io ho salvato in un file di nome Firefox_reload.ahk.
Se non desiderate che il login avvenga in modo automatico, per ragioni di sicurezza, togliete le righe

SendInput USERID{TAB}PASSWORD{ENTER}
Sleep 1000

dalla macro. E a quel punto potete togliere anche le graffe.
Anzi quasi quasi ve lo consiglio, perche' io ho introdotto il login automatico ma non so per quanto lo lascero' cosi', visto che e' poco (anzi niente) sicuro avere la pwd in chiaro.

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

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

if ffox_reload_AttivaFinestra("Autenticazione richiesta") == 1
{
SendInput USERID{TAB}PASSWORD{ENTER}
Sleep 1000
SendInput {ENTER} ; --- INVIO a eventuale richiesta ripristino sessione precedente da parte di firefox
}
else
reload

;--------------------------------------------------------------------------------

ffox_reload_AttivaFinestra(nomeFinestra)
{
WinActivate, %nomeFinestra%,
Loop, 10
{
WinWaitActive, %nomeFinestra%, , 1
if ErrorLevel
WinActivate, %nomeFinestra%,
else
return 1
}
return 0
}

exitapp




Il funzionamento della macro (che si capisce benissimo anche dal facile codice, credo) e' il seguente:
- all'avvio della macro essa chiude il processo firefox
- attende un secondo
- lancia nuovamente firefox (mettete il vostro path corretto, perche' funzioni)
- mediante la funzione ffox_reload_AttivaFinestra() attende che appaia a video la finestra di login "Autenticazione richiesta" (se avete la versione in un'altra lingua mettete il titolo della vostra finestra di login)
- se entro 10 cicli, ovvero dieci secondi, la finestra appare, allora essa viene portata in primo piano e vengono inseriti userid e pwd e premuto INVIO
- se la finestra non appare la macro viene ricaricata e il processo sopra descritto viene ripetuto.

Ovvio che se firefox non partira' mai correttamente, anche la macro non terminera' mai, ma non mi sembrava il caso di gestire una simile situazione, dato che in tal caso ognuno attendera' il numero di tentativi che preferisce e poi potra' bloccare manualmente il processo (col tasto destro nella tray area) e procedere a suo (dis)piacimento.

Spero la macro vi sia utile anche solo come idea per qualcosa di simile.

Ciao
Marco

2 commenti:

Anonimo ha detto...

Ciao, senti, hai idea di come fare a navigare tra le schede di firefox (ovvero tra le pagine aperte come nuova scheda e non come nuova finestra) usando uno script scritto in autohotkey? perchè fin'ora non ho trovato niente.
Per "navigare tra" intendo spostarsi tra le schede, o meglio ATTIVARLE: tra 5 schede aperte, identificarne una e portarla alla vista, evidenziarla. Semplicemente, capito?
Inoltre, devo specificare che la mia intenzione è di usare una istruzione come winactivate o qlcs di simile, semplice e difficilmente fallibile.
Vorrei evitare TAB e vari...
Se puoi aiutarmi grazie.
Simo.

Marco ha detto...

Il problema qualche volta me lo sono posto, ma non essendo una necessita', non ne ho fatto nulla. Adesso, data la tua domanda ho dato un'occhiata, ma da quel che ho visto non ci sono comandi idonei (oppure non ho guardato bene :-).
Per cercare ho smanettato con AutoScriptWriter (recorder) e con l'help di AutoHotKey: mi pare proprio che i TAB li ignori. Non ne so abbastanza di interfaccia windows per fare delle ricerche piu' mirate.
Se mi viene sottomano qualcosa ti faccio sapere, ma non e' che ci smanetti tutti i giorni con le macro (cioe': le uso tutti i giorni ma le modifico/creo di rado).
Se viceversa trovi qualcosa tu, fammi sapere.
Ciao.
Marco.