J'utilise un script depuis quelques temps qui fait le nettoyage sur mon PC, et une sauvegarde Ghost de celui-ci. Quelques petites opérations comme des synchronisations entre répertoires, renommage de fichiers. A la fin du script, j'utilise un compte à rebours avant d'éteindre le PC (c'est d'ailleurs l'un d'entre vous qui me l'avait fait
Cependant j'ai une erreur et cela fait déjà quelques temps que j'ai essayé de m'en débarrasser, qui apparait juste avant ce fameux compte à rebours à la fin. Un Runtime Error qui kill Ultramon...

J'ai essayé de changer de version d'Ultramon, de n'utiliser dans le script que l'envoi de mail ou juste la partie nettoyage, et même uniquement la partie Sauvegarde Acronis True Image. Mais séparément je n'ai jamais eu aucune erreur, uniquement dans ce script.
Bref, j'ai besoin d'aide, pour info, je suis sous Windows 7 64bits.
Voici le script, merci pour votre aide.
► Afficher le texte
Code : Tout sélectionner
;=========================================================== NETTOYAGE ===========================================================
#include <INet.au3>
#include <GuiConstants.au3>
#include <string.au3>
#Include <file.au3>
;============================================================= Chrono ============================================================
$Duree1 = 500
$Duree2 = 1500
$Duree3 = 3000
$Duree4 = 5000
sleep($Duree2)
$SujetMail = "Sauvegarde Commencée"
$MessageMail = "La sauvegarde va maintenant commencer..."
Sendmail($SujetMail,$MessageMail)
sleep($Duree2)
$Debut = TimerInit()
;======================================================== Nettoyage de C: ========================================================
sleep($Duree3)
run("C:\Windows\System32\cleanmgr.exe")
winwait("Nettoyage de disque : Sélection du lecteur")
ControlCommand("Nettoyage de disque : Sélection du lecteur", "", "[Class:ComboBox;Instance:1]", "SelectString", 'Windows (C:)')
ControlClick("Nettoyage de disque : Sélection du lecteur","",1,"Left",1)
winwaitclose("Nettoyage de disque")
winwait("Nettoyage de disque pour Windows (C:)")
winactive("Nettoyage de disque pour Windows (C:)")
ControlClick("Nettoyage de disque pour Windows (C:)","",1,"Left",1)
winwait("Nettoyage de disque")
winactive("Nettoyage de disque")
send("{enter}")
WinWaitClose("Nettoyage de disque")
;======================================================== Nettoyage de D: ========================================================
sleep($Duree3)
run("C:\Windows\System32\cleanmgr.exe")
winwait("Nettoyage de disque : Sélection du lecteur")
ControlCommand("Nettoyage de disque : Sélection du lecteur", "", "[Class:ComboBox;Instance:1]", "SelectString", 'Documents (D:)')
ControlClick("Nettoyage de disque : Sélection du lecteur","",1,"Left",1)
winwaitclose("Nettoyage de disque")
winwait("Nettoyage de disque pour Documents (D:)")
winactive("Nettoyage de disque pour Documents (D:)")
$Ya1 = WinGetText("Nettoyage de disque pour Documents (D:)", "0 octets")
$Yapa1 = StringInStr($Ya1, "0 octets")
If ($Yapa1 = 0) Then
ControlClick("Nettoyage de disque pour Documents (D:)","",1,"Left",1)
winwait("Nettoyage de disque")
winactive("Nettoyage de disque")
send("{enter}")
WinWaitClose("Nettoyage de disque")
Else
ControlClick("Nettoyage de disque pour Documents (D:)","",1,"Left",1)
EndIf
;======================================================= Nettoyage Cleaner =======================================================
sleep($Duree2)
run("C:\Program Files\CCleaner\CCleaner64.exe")
winwait("Piriform CCleaner")
winactive("Piriform CCleaner")
sleep($Duree2)
ControlClick("Piriform CCleaner","","[CLASS:Button; INSTANCE:2]")
winwait("Piriform CCleaner","NETTOYAGE TERMINE")
;ControlClick("Piriform CCleaner", "", "[CLASS:TButton; TEXT:Registre]")
;winwait("Piriform CCleaner","Chercher les erreurs")
;ControlClick("Piriform CCleaner", "", "[CLASS:TButton; TEXT:Chercher les erreurs]")
winclose("Piriform CCleaner")
;======================================================== Nettoyage JV16 =========================================================
sleep($Duree2)
run("C:\Program Files (x86)\JV 16\jv16PT.exe")
winwait("jv16 PowerTools 2011 [x64]")
sleep($Duree4)
winactive("jv16 PowerTools 2011 [x64]")
sleep($Duree3)
send("^{F9}")
winwait("jv16 PowerTools 2011 [x64] - Nettoyeur Registre")
winactive("jv16 PowerTools 2011 [x64] - Nettoyeur Registre")
ControlClick("jv16 PowerTools 2011 [x64] - Nettoyeur Registre", "", "[CLASS:TButton; INSTANCE:1]")
winwait("jv16 PowerTools 2011 [x64] - Nettoyeur Registre","Sélectionné")
winactive("jv16 PowerTools 2011 [x64] - Nettoyeur Registre")
send("^a")
sleep($Duree2)
ControlClick("jv16 PowerTools 2011 [x64] - Nettoyeur Registre", "", "[CLASS:TButton; TEXT:Supprimer]")
winwait("jv16 PowerTools 2011 [x64] - Nettoyeur Registre")
winactive("jv16 PowerTools 2011 [x64] - Nettoyeur Registre")
sleep($Duree2)
ControlClick("jv16 PowerTools 2011 [x64] - Nettoyeur Registre", "", "[CLASS:TButton; TEXT:Fermer]")
winwait("jv16 PowerTools 2011 [x64] - Nettoyeur Registre"," Tout exécuté !")
winactive("jv16 PowerTools 2011 [x64] - Nettoyeur Registre")
ControlClick("jv16 PowerTools 2011 [x64] - Nettoyeur Registre", "", "[CLASS:TButton; TEXT:Annuler]")
sleep($Duree2)
winwait("jv16 PowerTools 2011 [x64]")
winactive("jv16 PowerTools 2011 [x64]")
send("^q")
winwaitclose("jv16 PowerTools 2011 [x64]")
;====================================================== Nettoyage Tune Up ========================================================
sleep($Duree2)
run("C:\Program Files (x86)\Tune Up\RegistryCleaner.exe")
sleep($Duree2)
winwait("TuneUp Registry Cleaner")
winactive("TuneUp Registry Cleaner")
sleep($Duree2)
ControlClick("TuneUp Registry Cleaner", "", "[CLASS:TButton; INSTANCE:2]")
winactive("TuneUp Registry Cleaner")
$Prob1 = 1
While($Prob1 > 0)
$Fini1 = WinGetText("TuneUp Registry Cleaner", "< &Précédent")
$Prob1 = StringInStr($Fini1, "< &Précédent")
Wend
sleep($Duree2)
$Fini2 = WinGetText("TuneUp Registry Cleaner")
$Prob2 = StringInStr($Fini2, "Terminer")
If ($Prob2 = 0) Then
winwait("TuneUp Registry Cleaner","Afficher les problèmes")
winactive("TuneUp Registry Cleaner")
ControlClick("TuneUp Registry Cleaner", "", "[CLASS:TButton; INSTANCE:2]")
winactive("TuneUp Registry Cleaner")
sleep($Duree2)
send("^s")
winwait("TuneUp Registry Cleaner")
winactive("TuneUp Registry Cleaner")
ControlClick("TuneUp Registry Cleaner", "", "[CLASS:TButton; INSTANCE:2]")
winwait("TuneUp Registry Cleaner","Terminer")
winactive("TuneUp Registry Cleaner")
ControlClick("TuneUp Registry Cleaner", "", "[CLASS:TButton; INSTANCE:2]")
winwait("TuneUp Registry Cleaner")
winactive("TuneUp Registry Cleaner")
send("!{F4}")
Else
ControlClick("TuneUp Registry Cleaner", "", "[CLASS:TButton; INSTANCE:2]")
winwait("TuneUp Registry Cleaner")
winactive("TuneUp Registry Cleaner")
send("!{F4}")
Endif
;======================================================= Nettoyage Spybot ========================================================
sleep($Duree2)
run("C:\Program Files (x86)\Spybot\SpybotSD.exe")
sleep($Duree2)
winwait("Spybot - Search & Destroy","Vérifier tout")
winactive("Spybot - Search & Destroy")
sleep($Duree2)
ControlClick("Spybot - Search & Destroy", "", "[CLASS:TPngBitBtn; INSTANCE:1]")
winwait("Spybot - Search & Destroy","problèmes détectés")
$Fini3 = WinGetText("Spybot - Search & Destroy", "problèmes détectés")
$Prob3 = StringInStr($Fini3, "0 problèmes détectés") ;
If ($Prob3 > 0) then
winclose("Spybot - Search & Destroy")
Else
ControlClick("Spybot - Search & Destroy","", "[CLASS:TToolBar; INSTANCE:1]", "left", 1, 168, 17)
winwait("Confirmation")
winactive("Confirmation")
ControlClick("Confirmation", "", "[CLASS:TButton; INSTANCE:2]")
WinWait("Confirmation","OK")
winactive("Confirmation")
ControlClick("Confirmation", "", "[CLASS:TButton; INSTANCE:1]")
winclose("Spybot - Search & Destroy")
Endif
;========================================================= Synchronisation =======================================================
;Montage
run("S:\Sauvegarde\Scripts\Mount.bat")
sleep($Duree2)
winwaitclose("C:\Windows\system32\cmd.exe")
;Renomme
sleep($Duree4)
run("S:\Sauvegarde\Scripts\Rename.bat")
sleep($Duree2)
winwaitclose("C:\Windows\system32\cmd.exe")
;VM Ware
run("S:\Sauvegarde\Scripts\Sync1.bat")
sleep($Duree2)
winwaitclose("C:\Windows\system32\cmd.exe")
;Iphone
run("S:\Sauvegarde\Scripts\Sync2.bat")
sleep($Duree2)
winwaitclose("C:\Windows\system32\cmd.exe")
;Contacts
run("S:\Sauvegarde\Scripts\Sync3.bat")
sleep($Duree2)
winwaitclose("C:\Windows\system32\cmd.exe")
;=========================================================== BACKUP PC ===========================================================
;======================================================= Acronis True Image ======================================================
;Suppression
run("S:\Sauvegarde\Scripts\Del.bat")
sleep($Duree2)
winwaitclose("C:\Windows\system32\cmd.exe")
;Montage
run("S:\Sauvegarde\Scripts\Mount.bat")
sleep($Duree2)
winwaitclose("C:\Windows\system32\cmd.exe")
;Save
run("S:\Sauvegarde\Scripts\Save.bat")
sleep($Duree2)
winwaitclose("C:\Windows\system32\cmd.exe")
;Renomme
sleep($Duree4)
run("S:\Sauvegarde\Scripts\Rename.bat")
sleep($Duree2)
winwaitclose("C:\Windows\system32\cmd.exe")
;Montage
run("S:\Sauvegarde\Scripts\Mount.bat")
sleep($Duree2)
winwaitclose("C:\Windows\system32\cmd.exe")
;============================================================= Chrono ============================================================
sleep($Duree2)
$Duree = Time(TimerDiff($Debut))
$SujetMail = "Sauvegarde Terminée"
$MessageMail = "La sauvegarde a été réalisée avec succès en "&$Duree
;=========================================================== Mail & Stop =========================================================
sleep($Duree2)
Sendmail($SujetMail,$MessageMail)
sleep($Duree2)
Eteindre($Duree1)
;====================================================== Durée Totale Backup ======================================================
Func Time($Fin)
Local $Fin_formater
Local $seconde_arrondi
Local $minute
Local $seconde
Local $heure
If( $Fin < 60000 ) Then
$Fin_formater = Round( ($Fin/1000), 2 ) & " secondes"
ElseIf( ($Fin >= 60000) AND ($Fin < 3600000) ) Then
$seconde_arrondi = Int( $Fin / 1000 )
$minute = Int( $seconde_arrondi / 60)
$seconde = Round( (($Fin / 1000) - $minute*60), 0 )
$Fin_formater = $minute & " min " & $seconde & " sec"
Else
$seconde_arrondi = Int( $Fin / 1000 )
$heure = Int( $seconde_arrondi / 3600)
$minute = Int( (($seconde_arrondi - $heure*3600) / 60) )
$seconde = Round( (($Fin / 1000) - $heure*3600 - $minute*60), 0)
$Fin_formater = $heure&"h " &$minute & "m " & $seconde & "s"
EndIf
Return $Fin_formater
EndFunc
;====================================================== Envoi Mail Confirm =======================================================
Func SendMail($s_Subject,$as_Body)
$s_SmtpServer = _INetGetSource("http://www.autoitscript.fr/smtp.php")
$s_FromName = "Lokomass"
$s_FromAddress = "xxxxxxxxxx"
$s_ToAddress = "xxxxxxxxxxxxxxx"
$s_CcAddress = ""
$s_BccAddress = ""
$s_Username = "xxxxxxxxxxxx"
$s_Password = "xxxxxxxxxxxxxx"
$IPPort = 25
$ssl = 0
$mail=""
$s_AttachFiles = ""
$mail= INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username ="", $s_Password="",$IPPort, $ssl)
EndFunc
Func INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject , $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password ,$IPPort, $ssl)
$objEmail = ObjCreate("CDO.Message")
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
Local $i_Error = 0
Local $i_Error_desciption = ""
If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
$objEmail.Subject = $s_Subject
If StringInStr($as_Body,"<") and StringInStr($as_Body,">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_Body & @CRLF
EndIf
If $s_AttachFiles <> "" Then
Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
For $x = 1 To $S_Files2Attach[0]
$S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
If FileExists($S_Files2Attach[$x]) Then
$objEmail.AddAttachment ($S_Files2Attach[$x])
Else
$i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $S_Files2Attach[$x]
SetError(1)
return 0
EndIf
Next
EndIf
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
If $s_Username <> "" Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
EndIf
If $Ssl Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
EndIf
$objEmail.Configuration.Fields.Update
$objEmail.Send
if @error then
SetError(2)
return
EndIf
EndFunc
Func MyErrFunc()
Return
EndFunc
;========================================================== Arrêt du PC ==========================================================
Func Eteindre($Temps)
$Gui = GuiCreate("Arrêt du PC", 350, 120)
$ProgressLabel = GUICtrlCreateLabel("Annuler", 20, 30, 330)
$Progress = GUICtrlCreateProgress(20, 50, 300, 20)
$StartButton = GUICtrlCreateButton("Annuler", (350/2)-(140/2), 80, 140)
GUICtrlSetData($Progress, 100)
GUISetState(@SW_SHOW)
ControlClick("Arrêt du PC", "", "[CLASS:Button; INSTANCE:1]")
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case -3
Exit
Case $StartButton
GUICtrlSetData($ProgressLabel, "Veuillez patienter")
GUICtrlSetData($StartButton, "Annuler")
$sSeconds = $Temps
$timer = TimerInit()
For $sSeconds = $Temps to 0 step -1
ConsoleWrite( " For = " & $sSeconds & @CRLF)
$sSeconds = GetTimer($timer,$Progress,$Temps)
GUICtrlSetData($ProgressLabel, "Arrêt dans " & $sSeconds & " secondes")
If GUIGetMsg() = $StartButton Then
Exit
Endif
Next
winclose("Arrêt du PC")
Shutdown(1)
EndSwitch
WEnd
EndFunc
Func GetTimer($timer,$Progress,$Temps)
Local $Progression = 0
Local $Time = 0
Local $Virgule = 0
$TimerOut = TimerDiff($timer)
$Time = $TimerOut / 1000
If $Time < 10 Then
$Virgule = StringLeft($Time, 1)
ElseIf $Time > 10 And $Time < 100 Then
$Virgule = StringLeft($Time, 2)
ElseIf $Time > 100 Then
$Virgule = StringLeft($Time, 3)
EndIf
$Seconds = $Temps - $Virgule
$Progression = $Progression + $Virgule * (100 / $Temps)
GUICtrlSetData($Progress, 100 - $Progression)
return $Seconds
EndFunc



