Newsgroup: it.comp.software.newsreader
Titolo: [AGENT] SendTo per Agent

[WARNING]: Post non wordwrappato per esigenze di leggibilità del codice.
Ho scritto un piccolo script di AutoIt per avere l'"Invia
a--->Destinatario Posta" collegato ad Agent, visto che "Agent SendTo"
non funziona dal Desktop.
Qui di seguito trovate il codice compilabile ed il file .ini (che deve
chiamarsi "AgentSendToOptions.ini") da mettere nella stessa cartella in
cui si trova l'eseguibile compilato dallo script.
Le uniche cose da fare sono creare un collegamento all'eseguibile e
piazzarlo nella "<Drive>\Documents And Settings\<Utente>\SendTo" per
Win2000/XP e "<Drive>\Windows\SendTo" per Win95/98/ME ed inserire nel
file .ini il percorso dove si trova l'eseguibile di Agent ed il nome
dell'eseguibile di Agent. L'estensione e la "\" finale del percorso sono
opzionali (c'è un controllo nello script che provvede a tutto).
Dovete fare attenzione al fatto che nella barra del titolo di Agent ci
sia la parola "agent" o "Agent", se non c'è potete usarne un'altra
corrispondente alla vostra barra del titolo personalizzata, modificando
opportunamente lo script.
Per chi volesse l'eseguibile già compilato ed il file .ini già pronto li
trovate qui:
http://www.fr3ddie.it/storage/Agent_SendTo.rar
 {link valido per 15 gg da ora}
Lo script "dovrebbe" funzionare da Agent v.1.8 a Agent v.3.0, io l'ho
testato _solo sulle 2.0 e 3.0_, se qualcuno vuole fare beta testing per
versioni precedenti a queste, ben venga.
Spero possa essere utile a qualche agentista ;o)
;#################################################### INIZIO SCRIPT ####################################################
; Agent SendTo
#NoTrayIcon
Opt( "WinTitleMatchMode", 2 )     ;1=start, 2=subStr, 3=exact, 4=advanced
Opt( "RunErrorsFatal", 1 )        ;1=fatal, 0=silent set @error
Break( 0 )
$OPTIONSFILE = "AgentSendToOptions.ini"
If FileExists( $OPTIONSFILE ) Then
   Load($OPTIONSFILE)
Else
   MsgBox( 48, "Errore", 'File "' & $OPTIONSFILE & '" mancante!!' )
EndIf
Exit
;############################################ Func Load ########################################################################################
Func Load($OPTIONSFILE)
     ; Lettura Opzioni dal file .ini:
     $percorsoAgent = IniRead( $OPTIONSFILE, "Opzioni", "PercorsoAgent", "" )
     $eseguibileAgent = IniRead( $OPTIONSFILE, "Opzioni", "EseguibileAgent", "" )
     ; Controllo se sono state inserite le opzioni nel file .ini:
     If ( ( $percorsoAgent <> "" ) AND ( $eseguibileAgent <> "" ) ) Then
         ; Controllo scrittura percorsi ed eseguibili:
         If ( ( StringRight( $percorsoAgent, 1 ) ) <> "\" ) Then
            $percorsoAgent = $percorsoAgent & "\"
         EndIf
         If ( ( StringRight( $eseguibileAgent, 4 ) ) <> ".exe" ) Then
            $eseguibileAgent = $eseguibileAgent & ".exe"
         EndIf
 
         ; Controllo se Agent è già in esecuzione, se non lo è lo carico:
         If ProcessExists( $eseguibileAgent ) Then
            SendTo()
         Else
            Run( $percorsoAgent & $eseguibileAgent, "", @SW_MAXIMIZE )
            ProcessWait( $eseguibileAgent, 15 )
            Sleep( 3 * 1000 )
            SendTo()
         EndIf
     Else
        MsgBox( 48, "Errore", 'Nel file "' & $OPTIONSFILE & '" non sono state specificate opzioni valide!! Aprire il file con Blocco Note (Notepad) ed inserire opzioni corrette' )
     EndIf
EndFunc
;############################################ Func Load ########################################################################################
;############################################ Func SendTo ########################################################################################
Func SendTo()
    ; Trovo il titolo della finestra di Agent e controllo che sia stato trovato
    ; correttamente:
    $titoloFinestraAgent = WinGetTitle ( "Forté Agent" )
    If ( $titoloFinestraAgent == 1 ) Then
       $titoloFinestraAgent = WinGetTitle ( "Agent" )
       If ( $titoloFinestraAgent == 1 ) Then
          MsgBox( 48, "Errore", 'Il titolo della finestra di Agent non contiene la parola "Agent", case insensitive, modificare il titolo della finestra dalle opzioni di Agent' )
          Exit
       EndIf
    EndIf
    ; Controllo se la finestra di Agent è attiva, se non lo è la attivo:
    If ( WinActive( $titoloFinestraAgent ) <> 1 ) Then
       WinActivate ( $titoloFinestraAgent )
       Sleep( 500 )
    EndIf
    ; Allego il file:
    $ver = 0
    Send( "^m" ) ; premo "CTRL+M" per aprire un nuovo messaggio
    Sleep( 500 ) ; attendo 500 ms
    Send( "!a" ) ; premo "ALT+A" per vedere se si tratta di Agent 2.0
    Sleep( 200 ) ; attendo 200 ms
    If ( ( WinWait( "Attachments", "", 1 ) ) == 1 ) Then ; se appare la finestra
                                                         ; degli allegati di Agent
                                                         ; 2.0 procedo nella
                                                         ; "versione" per Agent 2.0,
                                                         ; altrimenti si tratta
                                                         ; di Agent 3.0 e procedo
                                                         ; di conseguenza
        $ver = 2
        Send( "!a" ) ; premo "ALT+A" per cliccare su "Add"
        Sleep( 500 ) ; attendo 500 ms
    Else
        Send( "!" ) ; Premo "ALT" per eliminare la precedente combinazione "ALT+A"
        Sleep( 200 ) ; attendo 200 ms
        Send( "!i" ) ; premo "ALT+I" per aprire il menu "Insert"
        Sleep( 200 ) ; attendo 200 ms
        Send( "f" ) ; premo "f" allegare un file
        Sleep( 500 ) ; attendo 500 ms
    EndIf
    Send( $CmdLine[1] & "{ENTER}" ) ; inserisco il parametro passato dalla
                                    ; funzione SendTo di Windows (il percorso
                                    ; completo del nome del file) nella inputbox
                                    ; di Agent e premo "INVIO"
    If ( $ver == 2 ) Then ; è Agent 2.0, devo completare l'inserimento del file
        Sleep( 200 ) ; attendo 200 ms
        For $i = 1 To 9
            Send( "{TAB}" ) ; Premo "TAB" nove volte (per raggiungere il pulsante "OK"):
        Next
        Send( "{ENTER}" ) ; premo "INVIO" per dare l'ok, Agent 2.0 allega il file.
    EndIf
EndFunc
;############################################ Func SendTo ########################################################################################
;#################################################### FINE SCRIPT ####################################################
# File .ini:
[Opzioni]
PercorsoAgent=c:\programmi\internet\forté agent\
EseguibileAgent=forté agent.exe
-- 
Fr3ddie, moderatore di it.comp.musica.mp3
fr3...@fr3ddie.it
Home Page: 
http://www.fr3ddie.it
PGP Public Key available on my website
Avere la coscienza pulita è indice di cattiva memoria

 
http://www.fr3ddie.it/storage/Agent_SendTo.rar
 {link valido per 15 gg da ora}
Ma poi evapora? Posso metterlo su 
agentit.altervista.org
?
-- 
Luca - e-mail: p.stevens at 
libero.it

 Ma poi evapora? Posso metterlo su 
agentit.altervista.org
?
E' gia' evaporato :-D
Chameleon
-- 
Togliere despammed per rispondere in E-Mail.

 non funziona dal Desktop.
Ahem, ho fatto un "piccolo" casino coi charset nell'altro post e c'era
rimasto un piccolo errore refuso dello script "personalizzato" che uso
io ;o)
Ecco di seguito lo script corretto ed una chicca ;o)
Un amico ha avuto dei problemi nel convertire dei file .eml in .mbx con
i vari tool che si trovano in rete, così gli ho scritto uno script di
Hamster che fa proprio questo: mettetelo nella cartella dove si trovano
tutti gli .eml e caricatelo (i file .hsc devono essere associati ad
Hamster), lui convertirà tutte le .eml e le "fonderà" in un unico
archivio chiamato "UNIX.mbox", importabile da tutti i mail/newsreader
che supportano lo standard.
Servirà? Boh, io mi sono divertito a farlo e l'ho salvato....
;#################################################### INIZIO SCRIPT ####################################################
; Agent SendTo

$OPTIONSFILE = "AgentSendToOptions.ini"

Exit




     Else

     EndIf



    $titoloFinestraAgent = WinGetTitle ( "Agent" )
    If ( $titoloFinestraAgent == 1 ) Then
       $titoloFinestraAgent = WinGetTitle ( "agent" )






;#################################################### FINE SCRIPT ####################################################
# File .ini:
[Opzioni]

###########################################################
SCRIPT EML-2-UNIX:
#################################################### INIZIO SCRIPT ####################################################
#!load hwindows.hsm
VarSet( $ListaMessaggi, ListAlloc )
VarSet( $MessageLista, ListAlloc )
VarSet( $DirectoryDiLavoro, ( RE_Extract( paramstr(0), "^.*\\" ) ) )
VarSet( $i, $MessageTesto, $From, $From2, $Anno, $Mese, $NumeroGiorno, $NomeGiorno, $Ora, $Date, - 1 )
# Creo la lista contenente tutti i nomi dei file:
ListFiles( $ListaMessaggi, $DirectoryDiLavoro + "*.eml", false )
# Eseguo la conversione di tutti i file .eml in un unico file UNIX Mbox:
For ( $i, 0, ( ListCount( $ListaMessaggi ) - 1 ) )
    # Carico il messaggio:
    If ( ( ListLoad( $MessageLista, ( $DirectoryDiLavoro + ListGet( $ListaMessaggi, $i ) ) ) ) = 0 )
        # Estraggo l'indirizzo e-mail dall'header "From:":
        $MessageTesto = ListGetText( $MessageLista )
        $From = RE_Extract( $MessageTesto, "(?-i)From\:\s.*" )
        $From2 = RE_Extract( $From, "\<(.*)?\@(.*)?\.(.*)?\>" )
        If ( $From2 = "" )
            $From = Trim( $From, "From: " )
            $From = RE_Extract( $From, "(.*)?\@(.*)?\.(.*)?" )
            $From = Trim( $From )
        Else
            $From = $From2
            $From = Trim( $From, "<" )
            $From = Trim( $From, ">" )
        EndIf
        # Estraggo e riformatto la data:
        $Date = RE_Extract( $MessageTesto, "(?-i)Date\:(.*)?" )
        $Date = Trim( $Date, "Date: " )
        $Anno = RE_Extract( $Date, "\s\d{4}\s" )
        $Anno = Trim( $Anno )
        $Mese = RE_Extract( $Date, "\s\w{3}\s" )
        $Mese = Trim( $Mese )
        $NumeroGiorno = RE_Extract( $Date, "\s\d{1,2}\s" )
        $NumeroGiorno = Trim( $NumeroGiorno )
        If ( ( RE_Match( $NumeroGiorno, "^\d$" ) ) )
            $NumeroGiorno = "0" + $NumeroGiorno
        EndIf
        $NomeGiorno = RE_Extract( $Date, "^\w{3}" )
        $Ora = RE_Extract( $Date, "\d{2}\:\d{2}\:\d{2}" )
 
        # Creo il "From" secondo lo UNIX Standard Message e lo inserisco come prima riga:
        $From = "From " + $From + " " + $NomeGiorno + " " + $Mese + " " + $NumeroGiorno + " " + $Ora + " " + $Anno
        ListInsert( $MessageLista, 0, $From )
        ListInsert( $MessageLista, 0, "" )
        # Salvo/appendo il messaggio secondo lo UNIX Standard Message:
        If ( ( ListAppend( $MessageLista, $DirectoryDiLavoro + "UNIX.mbox" ) ) != 0 )
            MsgBox( "Non sono riuscito a creare/appendere il/al file ""UNIX.mbox"" il file: " + ( ListGet( $ListaMessaggi, $i ) ), "Errore", $MB_ICONERROR|$MB_OK|$MB_SYSTEMMODAL )
        EndIf
        # Pulisco la lista che contiene il messaggio:
        ListClear( $MessageLista )
    Else
        AddLog( "File " + ListGet( $ListaMessaggi, $i ) + " non trovato od errore generico", 6 )
    EndIf
EndFor
# Elimino la prima riga del file che è vuota:
ListLoad( $MessageLista, $DirectoryDiLavoro + "UNIX.mbox" )
If ( ( ListGet( $MessageLista, 0 ) = "" ) && ( 0 < ListCount( $MessageLista ) ) )
    ListDelete( $MessageLista, 0 )
EndIf
ListSave( $MessageLista, $DirectoryDiLavoro + "UNIX.mbox" )
# Libero la memoria:
ListFree( $MessageLista )
ListFree( $ListaMessaggi )
Quit
#################################################### FINE SCRIPT ####################################################
-- 
Fr3ddie, moderatore di it.comp.musica.mp3
fr3...@fr3ddie.it
Home Page: 
http://www.fr3ddie.it
PGP Public Key available on my website
A computer is like an air conditioner:
it stops working when you open Windows.