
Au début, je voulais vous mettre le code tel quel (ouhouh ! le pas gentil), mis j'ai vu que ce code, vu ce que j'utilsais, pouvais répondre à ceertaines questions de débutants. Ainsi je vous fourni un code completement commenté.
CheckBotMain.pb
Code : Tout sélectionner
;- Défini les variables globales.
Global crack.l, warez.l, gamez.l, p2p.l, sexe.l, ignored.l, LIgnore.l, nbdirectories.l, Tocheck
;- Créé le tableau pour les fichiers à ignorer.
Dim ToIgnore.s(100)
;- Créé la structure pour les fichiers sensibles.
Structure Files
file.s
directory.s
lfcrack.l
lfwarez.l
lfgamez.l
lfp2p.l
lfsexe.l
EndStructure
;- Créé la liste chaînée permet d'enregistrer les fichiers.
NewList Infected.Files()
;- Compte le nombre de dossiers à scanner.
If ReadFile(1, "directories.conf")
; Part à 1 car il y a déjà avec le readstring de while.
nbdirectories = 1
; Boucle de lecture du fichier
While ReadString()
; ligne$ est la ligne courante.
ligne$ = ReadString()
; Si elle ne commence pas par # (commentaire)
If Left(ligne$, 1) <> "#"
; Incrémentation
nbdirectories = nbdirectories + 1
EndIf
Wend
; Fermeture du fichier
CloseFile(1)
EndIf
;- Inclue le fichier contenant toutes les fonctions et constantes.
IncludeFile "CheckBotInclude.pb"
;- Ouvre la fenêtre principale
Open_Window_0()
;- Boucle principale
Repeat
; Attend un évenement
Event = WaitWindowEvent()
; Si cet évenement vient d'un gadget
If Event = #PB_EventGadget
; Cherche l'ID du gadget
GadgetID = EventGadgetID()
; Si c'est le bouton vérifier
If GadgetID = #Button_1
; Lancement d'un thread pour vérifier les fichiers/dossiers.
CreateThread(@main(), 0)
; Si c'est le bouton quitter
ElseIf GadgetID = #Button_2
; Quitte la boucle
quit = 1
EndIf
EndIf
; Fin de la boucle
Until Event = #PB_EventCloseWindow Or quit = 1
;- Quitte le programme
End
Code : Tout sélectionner
;- Déclaration des constantes pour les fenêtres.
Enumeration
#Window_0
#Window_1
EndEnumeration
;- Déclaration des constantes pour les gadgets.
Enumeration
#ProgressBar_0
#Text_0
#Text_1
#Listview_0
#Button_1
#Button_2
#Intro
#Fichier
#Demande
#FDelete
#Clear
#Rien
EndEnumeration
Procedure FindFile(file$) ; Cherche un fichier dans la liste des fichiers à ignorer.
; Boucle de 0 à 99 (taille maximale du tableau).
For i = 0 To 99
; Retourne le nom de fichier contenu dans le tableau à l'adresse i.
Lfile$ = ToIgnore(i)
; Si ce fichier est le fichier en cours.
If Lfile$ = file$
; la prococédure retourne vrai (true).
ProcedureReturn #TRUE
; Et quitte la boucle.
Break
EndIf
Next i
EndProcedure
Procedure WriteLog(text$, mode) ; Écrit le fichier log.
; Si le mode est 2
If mode = 2
; Ajout de l'information dans la liste.
AddGadgetItem(#Listview_0, -1, text$)
EndIf
; S'il arrive à ouvrir/créer le fichier.
If OpenFile(0, "results.log")
; Place le pointeur en fin de fichier.
FileSeek(Lof())
; Et écrit le texte demandé.
WriteStringN(text$)
; Puis ferme le fichier
CloseFile(0)
EndIf
EndProcedure
Procedure ExamineFile(file$) ; Scanne le fichier à la recherche de mots 'interdits'
; S'il arrive à ouvrir le fichier en lecture.
If ReadFile(2, file$)
; Mise en place de variables.
delay = 1
vide = 0
notclean = 0
fcrack.l = 0
fwarez.l = 0
fgamez.l = 0
fp2p.l = 0
fsexe.l = 0
; Boucle de lecture.
Repeat
; Lit la ligne en cours.
ligne$ = ReadString()
; La met en miniscules.
ligne$ = LCase(ligne$)
; S'il trouve le mot 'crack'.
If FindString(ligne$, "crack", 0)
; Incrémente la variable globale crack.
crack = crack + 1
; Incrémente la variable fcrack.
fcrack = fcrack + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; S'il trouve le mot 'warez'.
If FindString(ligne$, "warez", 0)
; Incrémente la variable globale warez.
warez = warez + 1
; Incrémente la variable fwarez.
fwarez = fwarez + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; S'il trouve le mot 'gamez'.
If FindString(ligne$, "gamez", 0)
; Incrémente la variable globale gamez.
gamez = gamez + 1
; Incrémente la variable fgamez.
fgamez = fgamez + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; S'il trouve le mot 'p2p'.
If FindString(ligne$, "p2p", 0)
; Incrémente la variable globale p2p.
p2p = p2p + 1
; Incrémente la variable fp2p.
fp2p = fp2p + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; S'il trouve le mot 'sexe'.
If FindString(ligne$, "sexe", 0)
; Incrémente la variable globale sexe.
sexe = sexe + 1
; Incrémente la variable fsexe.
fsexe = fsexe + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; Supprime tous les espaces au début et à la fin de la chaîne, si la chaîne devient nulle.
If Trim(ligne$) = ""
; Incrémente la variable vide.
vide = vide + 1
EndIf
; Si delay (= 1)
If delay
; Pause de 1 milliseconde.
Delay(1)
; Mise à zéro de delay.
delay = 0
EndIf
; Fin de la boucle : avoir atteint la fin du fichier ou le nombre de lignes vides (10000).
Until Eof(2) Or vide = 10000
; Si notclean égale 1, le fichier n'est pas propre, il contient des mots 'interdits'.
If notclean = 1
; Enregistrement de ce fichier dans la liste.
AddElement(Infected())
; Met son nom.
Infected()\file = GetFilePart(file$)
; Met son chemin.
Infected()\directory = GetPathPart(file$)
; Met le nombre de mots interdits trouvés (non utilsé).
Infected()\lfcrack = fcrack
Infected()\lfwarez = fwarez
Infected()\lfgamez = fgamez
Infected()\lfp2p = fp2p
Infected()\lfsexe = fsexe
; Incrémente la variable globale Tocheck.
Tocheck = Tocheck + 1
EndIf
; Ferme le fichier.
CloseFile(2)
; S'il ne peut pas lire le fichier.
Else
; En informe l'utilisateur.
WriteLog("Impossible de lire "+NextD$+DEN$, 2)
EndIf
EndProcedure
Procedure ClearFile(file$) ; Nettoie le fichier.
; Renome le fichier en fichier *.bak.
If RenameFile(file$, file$+".bak")
; Ouvre le fichier renommé et créé un fichier ayant le nom du précédent.
If ReadFile(2, file$+".bak") And CreateFile(3, file$)
; Mise en place de variables.
vide = 0
delay = 1
; Boucle de lecture, remplacement, écriture.
Repeat
; Utilise le fichier deux (le renommé).
UseFile(2)
; Lit la ligne en cours.
ligne$ = ReadString()
; Remplace tous les mots interdits par 'rien'
ligne$ = ReplaceString(ligne$, "crack", "")
ligne$ = ReplaceString(ligne$, "warez", "")
ligne$ = ReplaceString(ligne$, "gamez", "")
ligne$ = ReplaceString(ligne$, "p2p", "")
ligne$ = ReplaceString(ligne$, "sexe", "")
; Change de fichier et prend le trois (le nouveau créé)
UseFile(3)
; Et écris la chaîne 'pure'.
WriteStringN(ligne$)
; Supprime tous les espaces au début et à la fin de la chaîne, si la chaîne devient nulle.
If Trim(ligne$) = ""
; Incrémente la variable vide.
vide = vide + 1
EndIf
; Si delay (= 1)
If delay
; Pause de 1 milliseconde.
Delay(1)
; Mise à zéro de delay.
delay = 0
EndIf
; Fin de la boucle : avoir atteint la fin du fichier ou le nombre de lignes vides (10000).
Until Eof(2) Or vide = 10000
; Ferme les deux fichiers.
CloseFile(2)
CloseFile(3)
; Supprime le fichier *.bak.
DeleteFile(file$+".bak")
; Informe que le nettoyage a réussi.
WriteLog("Fichier "+file$+" nettoyé avec succès !", 2)
; S'il ne peut pas créer un lire un fichier, informe.
Else
MessageRequester("Erreur", "Impossible de nettoyer le fichier !", #MB_ICONERROR)
EndIf
; S'il ne peut pas renommer, informe.
Else
MessageRequester("Erreur", "Impossible de nettoyer le fichier !", #MB_ICONERROR)
EndIf
EndProcedure
Procedure ExamineFDirectory(nbdirectory, directory$, type) ; Examine les répertoires.
; S'il l'examen a réussi.
If ExamineDirectory(nbdirectory, directory$, "*.*")
; Cherche la prochaine entrée.
NDE = NextDirectoryEntry()
; Tant qu'elle n'est pas nulle (inexistante).
While NDE <> 0
; Si elle vaut un, c'est un fichier.
If NDE = 1
; Cherche le nom du fichier.
DEN$ = DirectoryEntryName()
; Cherche si le fichier est dans la liste des fichiers à ignorer.
If FindFile(DEN$)
; Si oui, incrémente la variable globale ignored.
ignored = ignored+1
Else
; Sinon, ajoute le fichier qui va être scanné dans la liste.
AddGadgetItem(#Listview_0, -1, directory$+DEN$)
; Et l'affiche sous la barre de progression.
SetGadgetText(#Text_1, directory$+DEN$)
; Puis examine le fichier.
ExamineFile(directory$+DEN$)
EndIf
; Si l'entrée vaut deux, c'est un répertoire.
ElseIf NDE = 2
; Cherche le nom du répertoire.
DEN$ = DirectoryEntryName()
; S'il ne vaut pas les points de DOS/UNIX.
If DEN$ <> "." And DEN$ <> ".."
; Si le répertoire ne termine pas par un contre slash.
If Right(DEN$, 1) <> "\"
; Ajout de ce dernier.
DEN$ = DEN$ + "\"
EndIf
; Ajoute le dossier qui va être examiné dans la liste.
AddGadgetItem(#Listview_0, -1, directory$+DEN$)
; Et l'affiche sous la barre de progression.
SetGadgetText(#Text_1, directory$+DEN$)
; Puis examine ce répertoire (en incrementant la variable des répertoires, afin de pouvoir retourner au précédent)
ExamineFDirectory(nbdirectory+1, directory$+DEN$, 2)
EndIf
EndIf
; Utilise le répertoire précédent.
UseDirectory(nbdirectory)
; Cherche l'entrée suivante.
NDE = NextDirectoryEntry()
; Attend une milliseconde.
Delay(1)
Wend
; Si le type de répertoire est 1 (répertoire et non sous-répertoire).
If type = 1
; Informe du succès de l'opération.
WriteLog("Répertoire examiné avec succés", 2)
If crack = 0 And warez = 0 And gamez = 0 And p2p = 0 And sexe = 0
; Si rien d'illégal n'a été trouvé, informe.
WriteLog("Rien d'ill"+Chr(130)+"gal n'a "+Chr(130)+"t"+Chr(130)+" trouv"+Chr(130)+" !", 2)
Else
; Sinon, informe de ce qui a été trouvé.
WriteLog("crack = "+Str(crack), 2)
WriteLog("warez = "+Str(warez), 2)
WriteLog("gamez = "+Str(gamez), 2)
WriteLog("p2p = "+Str(p2p), 2)
WriteLog("sexe = "+Str(sexe), 2)
EndIf
; Si le nombre de fichiers ignorés est différent de zéro.
If ignored <> 0
; Informe du nombre de fichiers ignorés.
WriteLog(Str(ignored)+" fichier(s) ignoré(s) !", 2)
EndIf
EndIf
EndIf
EndProcedure
Procedure Open_Window_1() ; Créé la fenêtre de demande d'execution pour les fichiers 'sensibles'.
If OpenWindow(#Window_1, 235, 104, 230, 109, #PB_Window_TitleBar | #PB_Window_WindowCentered, "Que faire ?")
If CreateGadgetList(WindowID())
TextGadget(#Intro, 10, 10, 210, 20, "Des élements illégaux ont été trouvés dans :")
TextGadget(#Fichier, 10, 30, 210, 20, "")
TextGadget(#Demande, 10, 60, 230, 20, "Que désirez vous faire ?")
ButtonGadget(#FDelete, 10, 80, 60, 20, "Supprimer")
ButtonGadget(#Clear, 80, 80, 60, 20, "Nettoyer")
ButtonGadget(#Rien, 160, 80, 60, 20, "Rien", #PB_Button_Default)
EndIf
EndIf
EndProcedure
Procedure main() ; le coeur du programme.
; Désactive le bouton vérifier.
DisableGadget(#Button_1, 1)
; Ouvre la liste de fichier à ignorer.
If ReadFile(0, "ignore.list")
; L'affiche.
SetGadgetText(#Text_0, "Lecture de la liste des fichiers à ignorer")
; Et l'ajoute à la liste.
AddGadgetItem(#Listview_0, -1, "Lecture de la liste des fichiers à ignorer")
; Boucle de lecture.
Repeat
; Lit la ligne en cours.
FToIgnore$ = ReadString()
; Et l'ajoute à la liste des fichiers à ignorer.
ToIgnore(LIgnore) = FToIgnore$
; Incrémente la variable globale LIgnore
LIgnore = LIgnore + 1
; Ce, jusqu'à la prochaine ligne vide.
Until FToIgnore$ = ""
; Fermeture du fichier.
CloseFile(0)
; Avancement de la barre de progression.
SetGadgetState(#ProgressBar_0, 1)
EndIf
; Lit de le fichier contenant les répertoires.
If ReadFile(1, "directories.conf")
; Et commence la vérification.
SetGadgetText(#Text_0, "Vérification en cours...")
; Lit la ligne en cours.
NextD$ = ReadString()
; Met la variable i en place.
i = 2
; Pendant qu'il y aura des répertoire à lire.
While NextD$
; Si le répertoire ne commence pas par # (répertoire).
If Left(NextD$, 1) <> "#"
; Si le répertoire ne termine pas par un contre slash.
If Right(NextD$, 1) <> "\"
; Ajout de ce dernier.
NextD$ = NextD$ + "\"
EndIf
; Informe du répertoire en cours d'examin.
WriteLog(NextD$, 2)
; Et avance.
SetGadgetState(#ProgressBar_0, i)
; Examine le répertoire.
ExamineFDirectory(3, NextD$, 1)
EndIf
; Remise à zéro de varaibles globales.
crack = 0
warez = 0
gamez = 0
p2p = 0
sexe = 0
ignored = 0
; Change de fichier.
UseFile(1)
; Et lit le répertoire suivant.
NextD$ = ReadString()
; Pause de 1 milliseconde.
Delay(1)
; Incrémente i
i = i + 1
Wend
; Si la variable globale Tocheck est supérieure à zéro.
If Tocheck > 0
; Boucle de 1 à Tocheck.
For k = 1 To Tocheck
; Affiche l'opération en cours.
SetGadgetText(#Text_0, "Nettoyage et suppression des fichiers...")
; Supprime le texte des fichiers.
SetGadgetText(#Text_1, "")
; Remet la liste des fichier 'sensibles' au début.
ResetList(Infected())
; Ouvre la fenêtre 'd'execution'
Open_Window_1()
; Prend l'entrée suivante dans la liste.
NextElement(Infected())
; Et l'affiche dans la fenêtre.
SetGadgetText(#Fichier, Infected()\file)
; Mise à zéro de suite.
Suite = 0
; Boucle pour la fenêtre.
Repeat
; Attend un évenement.
Event = WaitWindowEvent()
; S'il vient d'un gagdet.
If Event = #PB_EventGadget
; Cherche l'ID du gadget.
GadgetID = EventGadgetID()
; Si le gadget est le bouton 'supprimer'.
If GadgetID = #FDelete
; Suppression du fichier sur le disque.
DeleteFile(Infected()\directory+Infected()\file)
; Information.
WriteLog("Fichier "+file$+" supprimé avec succès !", 2)
; Mise à 1 de suite.
Suite = 1
; Si c'est le bouton 'nettoyer'.
ElseIf GadgetID = #Clear
; Nettoie le fichier.
ClearFile(Infected()\directory+Infected()\file)
; Mise à 1 de suite.
Suite = 1
; Si c'est le bouton 'rien'.
ElseIf GadgetID = #Rien
; Mise à 1 de suite.
Suite = 1
EndIf
EndIf
; Fin de la boucle si Suite égale 1
Until Suite = 1
; Supprime le fichier en cours de la liste.
DeleteElement(Infected())
Next k
; Mise à zéro de Tocheck.
Tocheck = 0
EndIf
; Réactive le gadget.
DisableGadget(#Button_1, 0)
; Enlève le texte des zone de texte.
SetGadgetText(#Text_0, "")
SetGadgetText(#Text_1, "")
; Remet la barre de progression à zéro.
SetGadgetState(#ProgressBar_0, 0)
; Sinon, informe de la non lecture.
Else
AddGadgetItem(#Listview_0, -1, "Impossible de lire le fichier de configuration !")
EndIf
EndProcedure
Procedure Open_Window_0() ; Ouvre la fenêtre principale
If OpenWindow(#Window_0, 297, 133, 350, 489, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Vérificateur de fichiers")
If CreateGadgetList(WindowID())
ProgressBarGadget(#ProgressBar_0, 20, 30, 310, 30, 0, nbdirectories+1)
TextGadget(#Text_0, 20, 10, 310, 20, "")
TextGadget(#Text_1, 20, 60, 310, 20, "")
ListViewGadget(#Listview_0, 20, 80, 310, 370)
ButtonGadget(#Button_1, 20, 460, 150, 20, "Vérifier")
ButtonGadget(#Button_2, 180, 460, 150, 20, "Quitter")
EndIf
EndIf
EndProcedure
