Page 1 sur 1
[R] Avis sur Script de nettoyage automatique CCleaner
Posté : ven. 25 janv. 2008 06:44
par bvivi
Bonjour à tous. J'utilise régulierement le logiciel CCleaner. Ce logiciel est réputé pour nettoyer rapidement les petits traces d'usage et autre fichiers temporaires d'un pc sans prendre de risque.
Malheuresement, il ne comporte aucune fonction d'automatisation. J'ai donc voulu créer un petit script pour automatiser les nettoyages à partir du gestionnaire de tache de windows.
J'ai choisi autoit pour réaliser mon petit projet mais c'est la premiere fois que j'utilise ce soft et je découvre son utilisation.
Je suis donc arrivé a un script à peu prés fonctionnelle. Il demeure certains bug comme par exemple la non fermeture de ccleaner à la fin de la tache certaines fois.
J'aimerais avoir votre avis et eventuellement que quelqu'un puisse apporter des corrections. Bref, voir si mon script tient la route :
Voiçi le code :
► Afficher le textele code
Code : Tout sélectionner
; Script nettoyage automatique CCleaner by bvivi57
; ----------------------------------------
;Il est nécessaire de lancer manuellement une fois CCleaner pour configurer les éléments à nettoyer puis supprimer dans la configuration général l'apparition des messages
;de confirmation
;utiliser le derniere version du logiciel
#include < INet.au3 >
; ===Déclaration des variables
$ccleaner= "C:\Program Files\CCleaner\CCleaner.exe"
; ===Fin déclaration de variables===
;=== DEBUT DU SCRIPT===
;On verifie si FireFox est ouvert
If ProcessExists("firefox.exe") Then
ProcessClose("firefox.exe")
EndIf
; on lance ccleaner.exe
Run($ccleaner)
; ensuite on attend que la fenetre soit ouverte et on l'active
WinWaitActive("Piriform CCleaner") ; ce qu'il y a entre crochet représente le titre de la fenêtre à attendre,.
; Maintenant on va se placer sur l'option nettoyer
Send("{TAB}"); on simule l'appuie sur la touche "TAB"
Sleep(200) ; on met une tempo avant de relancer une commande de
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
;On valide le nettoyage
Send("{ENTER}");on simule l'appuie sur la touche "ENTREE"
;On va mettre une tempo le temp que le nettoyage se termine
Sleep(50000)
;On va se placer sur l'option de réparation du registre
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{ENTER}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{ENTER}")
sleep (50000)
;On demande à réparer le registre pour tout ce qui est selectionné
Send("{TAB}")
Sleep (200)
Send("{ENTER}")
sleep (200)
;On teste si il y avait des objets à réparer en testant si oui ou non une fenetre de confirmation de sauvegarde est apparue
if WinActive("CCleaner", "Non") then
;Si il y'avait des objets à réparer on ne les sauvegarde pas
WinWaitActive("CCleaner", "Non") ; on active la fenêtre ayant pour titre "CCleaner" et contenant la chaine de caractères "Non"
Send("n") ;on ne veut pas enregistrer donc on appuie sur la touche "N"
Sleep (200)
;On demande de tout répararer
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{ENTER}")
sleep (200)
;On confirme la volonté de tout corriger
WinWaitActive("CCleaner", "OK")
Send("{ENTER}")
sleep (50000)
ProcessClose("CCleaner.exe");Fermeture de CCleaner
else
;Si aucun objet registre n'a été détecté on ferme ccleaner
ProcessClose("CCleaner.exe");Fermeture de CCleaner
EndIf
;On vérifie si ccleaner s'est bien fermé
If ProcessExists("CCleaner.exe") Then
ProcessClose("CCleaner.exe")
EndIf
;On envoie un mail pour prévénir que le nettoyage s'est bien déroulé
$s_SmtpServer = "smtp.free.fr"
$s_FromName = "Insomnia"
$s_FromAddress = "serveur2003.insomnia@mondomaine.fr" ; Celui qui envoye le mail
$s_ToAddress = "bvivi57@mondomaine.fr" ; la personne qui reçoit le mail
$s_Subject = "Nettoyage CCleaner"
Dim $as_Body[2]
$as_Body[0] = "Nettoyage effectué"
$as_Body[1] = "Aucun problèmes"
$Response = _INetSmtpMail ($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body)
Exit
;===FIN DU SCRIPT===
Merci à tous
Re: Avis sur Script de nettoyage automatique CCleaner
Posté : ven. 25 janv. 2008 07:40
par Tlem
Une autre méthode, consisterait à modifier le fichier Ccleaner.ini et winapp.ini pour choisir les paramètres de nettoyage,
puis de lancer Ccleaner en mode automatique :
Re: [..] Avis sur Script de nettoyage automatique CCleaner
Posté : ven. 25 janv. 2008 11:50
par Tragan
Salut à toi
bvivi !
Sincèrement, je crois que
Tlem (Salut à toi !) te propose la meilleure solution !
Si cela vous intéresse, j'ai modifié, compacté et portabilisé la dernière version de CCleaner avec MRU-Blaster intégré
Lien GigaSize :
http://www.gigasize.com/get.php?d=gwrfl7c060c
Il te suffit de rajouter un autre lanceur (Par ex: CCleaner Auto.exe) qui utilisierai les réglages en mode classique...
Code : Tout sélectionner
#NoTrayIcon
RunWait("App\CCleaner.exe /auto")
RegDelete("HKCU\SOFTWARE\VB and VBA Program Settings")
RegDelete("HKLM\SOFTWARE\CCleaner")
RegDelete("HKLM\SOFTWARE\Classes\cclaunch")
RegDelete("HKCR\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\Shell")
RegDelete("HKLM\SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\Shell")
RegWrite("HKCU\SOFTWARE\MRU-Blaster\Ignore","cleartraynotify","REG_BINARY","ffff")
RegWrite("HKCU\SOFTWARE\MRU-Blaster\Plugins\IECacheClean","AutomaticClean","REG_BINARY","ffff")
RegWrite("HKCU\SOFTWARE\MRU-Blaster\Plugins\IECacheClean","SecureDelete","REG_BINARY","ffff")
RegWrite("HKLM\SOFTWARE\MRU-Blaster\IECache","Location","REG_SZ",@UserProfileDir&"\Local Settings\Temporary Internet Files")
Run("App\mrub.exe")
WinWaitActive("MRU-Blaster")
Send("{Enter}")
WinWaitActive("MRU-Blaster Scan Window")
Send("{Tab}")
WinWaitActive("MRU-Blaster Scan Window")
Send("{Tab}{Enter}")
WinClose("MRU-Blaster")
RegDelete("HKCU\SOFTWARE\MRU-Blaster")
RegDelete("HKLM\SOFTWARE\MRU-Blaster")
Allez de bons CClean à tous et...
Bon Vent !
Tragan
Re: [..] Avis sur Script de nettoyage automatique CCleaner
Posté : sam. 26 janv. 2008 16:28
par bvivi
Bonjour, merci pour votre aide.
Je connaissais la commande /auto.
Mais cette derniere ne corrige pas les erreurs registres et se concentre uniquement sur le nettoyage.
C'est pourquoi je veux faire un script qui utilise toutes les fonctionnalité de ccleaner y compris le scanne et la réparation du registre.
Actuellement, le nettoyage et la correction du registre se font, mais j'ignore pqr de temps en temps, le logiciel ne se ferme pas.
Re: [R] Avis sur Script de nettoyage automatique CCleaner
Posté : sam. 26 janv. 2008 16:45
par Tlem
@Tragan
Tu suggère de supprimer des clés de la base de registre après le lancement de CCleaner en mode auto, mais la logique d'une véritable version portable devrait être la sauvegarde de ces clés (Si existantes) avant le lancement de CCcleaner, puis le lancement de CCleaner, puis la restauration des clés ...
Car si un utilisateur à déjà installer sur son poste la dite application en version non portable, il perd dans ce cas les paramètres qu'il aurait pu mettre !
Re: [R] Avis sur Script de nettoyage automatique CCleaner
Posté : sam. 26 janv. 2008 21:55
par Tragan
@
Tlem
Effectivement !!!
(meci !)
j'ai corrigé le tir:
Code : Tout sélectionner
#NoTrayIcon
RunWait("App\CCleaner.exe /Auto")
If Not FileExists(@ProgramFilesDir&"\CCleaner\CCleaner.exe")Then
RegDelete("HKCU\SOFTWARE\VB and VBA Program Settings")
RegDelete("HKLM\SOFTWARE\CCleaner")
RegDelete("HKLM\SOFTWARE\Classes\cclaunch")
RegDelete("HKCR\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\Shell")
RegDelete("HKLM\SOFTWARE\Classes\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\Shell")
EndIf
;Partie Nettoyage Registre Automatique;
Run("App\CCleaner.exe")
WinWaitActive("Piriform CCleaner")
Send("{Tab}{Enter}")
ControlClick("Piriform CCleaner","Chercher des erreurs",1026)
;Boucle qui évite un Sleep approximatif;
While 1
If Not ControlCommand("Piriform CCleaner","Annuler l'Analyse",1026,"IsEnabled", "")Then ExitLoop
WEnd
;Determine s'il ya des réparations à effectuer;
If ControlCommand("Piriform CCleaner","Réparer les erreurs sélectionnées",1027,"IsEnabled", "")Then
ControlClick("Piriform CCleaner","Réparer les erreurs sélectionnées",1027)
ControlClick("","Corriger toutes les erreurs sélectionnées",1100)
Send("{Enter}")
ControlClick("","Fermer",1104)
EndIf
;Boucle pour être certain que le processus s'arrête;
While 1
If Not ProcessExists("CCleaner.exe")Then ExitLoop
ProcessClose("CCleaner.exe")
WEnd
CCleaner n'est pas agréssif dans son néttoyage du registre, on peut sans problèmes lui faire confiance...
Personnellement, je n'ai jamais fais de backup et je n'ai jamais eu un seul souci...
En espérant t'avoir aidé
bvivi...
Bon Vent !
Tragan
Re: [R] Avis sur Script de nettoyage automatique CCleaner
Posté : sam. 26 janv. 2008 22:21
par Tlem
Tragan a écrit :j'ai corrigé le tir:
Je n'ai pas vu ou !!!
En fait, ce que je voulais dire, c'est que avant de lancer CCleaner en mode portable, il serais bien de sauvegarder les clés de registre qui risques d'etre modifiées, pour pouvoir les remettre en place à la fermeture du CCleaner portable, comme cela les paramètres de l'éventuel CCleaner local ne seront pas modifiés.
Re: [R] Avis sur Script de nettoyage automatique CCleaner
Posté : sam. 26 janv. 2008 22:43
par Tragan
@
Tlem
Ma version portable
(ainsi que celle de l'éditeur), n'écrit aucune clés de registre...
Tous les paramètres sont inscrits dans
ccleaner.ini
C'est pour cela que si le script detecte un ccleaner.exe dans programFiles, ils ne touchera pas aux clés pouvant être laissées par la version "fixe"
Et...effectivement !
j'ai oublier le Not!!!!
(bien vu et merci Tlem !)
Je viens de recorriger le tir !!!
(d'ailleur, je garde mon fusil à l'épaule desfois qui ai d'autre tir à corriger
)
Bon Vent !
Tragan
Re: [R] Avis sur Script de nettoyage automatique CCleaner
Posté : dim. 27 janv. 2008 10:58
par bvivi
Merci à tous pour votre aide.
Je me suis inspiré des codes présentés pour corriger mon propre script. Je ne cherche pas a rendre portable ccleaner mais uniquement à le lancer automatiquement tous les jours.
Apparament mon bug de fermeture ne se reproduit plus grace à la boucle while et j'ai put eviter de mettre des sleep alétoires.
A titre d'information je met mon code actuelle :
► Afficher le textele code
Code : Tout sélectionner
; Script nettoyage automatique CCleaner
; ----------------------------------------
#include < INet.au3 >
;=== DEBUT DU SCRIPT===
;On verifie si FireFox est ouvert
If ProcessExists("firefox.exe") Then
ProcessClose("firefox.exe")
EndIf
; on lance ccleaner.exe et le nettoyage automatique
RunWait(@ProgramFilesDir&"\CCleaner\CCleaner.exe /auto")
;Partie Nettoyage Registre Automatique;
Run(@ProgramFilesDir&"\CCleaner\CCleaner.exe")
WinWaitActive("Piriform CCleaner")
Send("{Tab}{Enter}")
ControlClick("Piriform CCleaner","Chercher des erreurs",1026)
;Boucle qui évite un Sleep approximatif;
While 1
If Not ControlCommand("Piriform CCleaner","Annuler l'Analyse",1026,"IsEnabled", "")Then ExitLoop
WEnd
;Determine s'il ya des réparations à effectuer;
If ControlCommand("Piriform CCleaner","Réparer les erreurs sélectionnées",1027,"IsEnabled", "")Then
ControlClick("Piriform CCleaner","Réparer les erreurs sélectionnées",1027)
;on ne les sauvegarde pas les objets
WinWaitActive("CCleaner", "Non") ; on active la fenêtre ayant pour titre "CCleaner" et contenant la chaine de caractères "Non"
Send("n") ;on ne veut pas enregistrer donc on appuie sur la touche "N"
Sleep (200)
;On demande de tout répararer
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{TAB}")
Sleep (200)
Send("{ENTER}")
sleep (200)
;On confirme la volonté de tout corriger
WinWaitActive("CCleaner", "OK")
Send("{ENTER}")
sleep (50000)
EndIf
;Boucle pour être certain que le processus s'arrête;
While 1
If Not ProcessExists("CCleaner.exe")Then ExitLoop
ProcessClose("CCleaner.exe")
WEnd
;On envoie un mail pour prévénir que le nettoyage s'est bien déroulé
$s_SmtpServer = "smtp.free.fr"
$s_FromName = "Aki"
$s_FromAddress = "windowsxp@mondomaine.fr" ; Celui qui envoye le mail
$s_ToAddress = "bvivi57@mondomaine.fr" ; la personne qui reçoit le mail
$s_Subject = "Nettoyage CCleaner"
Dim $as_Body[2]
$as_Body[0] = "Nettoyage effectué"
$as_Body[1] = "Aucun problèmes"
$Response = _INetSmtpMail ($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body)
Exit
;===FIN DU SCRIPT===
Plus je découvre AutoIt plus je le trouve pratique !
Merci encor