Un défaut à corriger et donc besoin de vos lumières pour y remédier. Le programme ne fonctionne qu'une fois de temps en temps et je ne comprend pas pourquoi. Je pense qu'il s'agit d'une question de priorité et qu'il faut trouver le moyen de faire fonctionner le programme avant explorer.exe de Windows lors du démarrage système.
Il nécessite d'être administrateur. Il faut compiler en exe pour tester.
A savoir : lorsque les fichiers sont effacés ou recréés vierges, Windows les met à jour automatiquement, il n'y a donc aucun danger pour votre système. je donne le code complet pour que vous voyez bien ce qu'il se passe dans son fonctionnement.
Voilà, si vous trouvez la solution pour qu'il fonctionne à tous coups ce sera très bien et vous aurez un programme perso pour effacer vos traces de navigations

Code pour PB 4.02
Code : Tout sélectionner
;/ INDEXDATCLEANER beta by Jacobus 30/08/2007
;/ Nettoyeur des fichiers Index.dat verrouillés
;/ Nécessite le redémarrage système
;/ Programme complet / non terminé
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
;/ Fonctionne "parfois" d'où la nécessité de tests sur d'autres machines
;/ voire d'améliorations à apporter si vous en trouvez pour que cela fonctionne à tous les coups.
;*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
;-Constantes
Enumeration
#WIN_IndexDatCleaner
#FramePrefsDatFiles
#Text_PrefsDatFiles
#CHECK_TIF_IE5_INDEXDAT
#CHECK_COOKIES_INDEXDAT
#CHECK_HISTORY_IE5_INDEXDAT
#Text_SizeOf_TIFIE5_INDEXDAT
#Text_SizeOf_COOKIES_INDEXDAT
#Text_SizeOf_HISTORY_INDEXDAT
#CHECK_HISTORY_IE5_URL_INDEXDAT
#BtnScanUrlIndexDat
#ListIconUrlIndexDatFiles
#FrameActivateDatFiles
#ActivateDeleteIndexDat
#Text_ActivateDeleteIndexDat
#Text_LastProcessDatFiles
#Container_Resultat
#TxtResultat_1
#TxtResultat_2
#TxtResultat_3
#TxtResultat_4
#NewTIFFileDat
#NewCookiesFileDat
#NewHistoryFileDat
#BtnReboot
#BtnCancel
#BtnQuit
EndEnumeration
#ProgramName = "IndexDatCleaner"
Global Font0, REP$
Font0 = LoadFont(0, "Comic Sans MS", 9,#PB_Font_Bold)
REP$ = GetCurrentDirectory()
ProcedureDLL.s GetSystemDirectory(NumDir.l)
hKey.l = 0
keyvalue.s = Space(255)
datasize.l = 255
If NumDir < 24 Or NumDir = 36
OpenKey.l = #HKEY_CURRENT_USER
Else
OpenKey.l = #HKEY_LOCAL_MACHINE
EndIf
SubKey.s = "Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
Select NumDir ; french XP
;current user
Case 1 : ValueName.s = "Administrative Tools"
Case 2 : ValueName.s = "AppData"
Case 3 : ValueName.s = "Cache" ; need for path
Case 4 : ValueName.s = "CD Burning"
Case 5 : ValueName.s = "Cookies" ; need...
Case 6 : ValueName.s = "Desktop"
Case 7 : ValueName.s = "Favorites"
Case 8 : ValueName.s = "Fonts"
Case 9 : ValueName.s = "History" ; need...
Case 10 : ValueName.s = "Local AppData"
Case 11 : ValueName.s = "Local Settings"
Case 12 : ValueName.s = "My Music"
Case 13 : ValueName.s = "My Pictures"
Case 14 : ValueName.s = "My Video"
Case 15 : ValueName.s = "NetHood"
Case 16 : ValueName.s = "Personal"
Case 17 : ValueName.s = "PrintHood"
Case 18 : ValueName.s = "Programs"
Case 19 : ValueName.s = "Recent"
Case 20 : ValueName.s = "SendTo"
Case 21 : ValueName.s = "Start Menu"
Case 22 : ValueName.s = "Startup"
Case 23 : ValueName.s = "Templates"
Case 36 : ValueName.s = "AppData"
;all users
Case 24 : ValueName.s = "Common Administrative Tools"
Case 25 : ValueName.s = "Common AppData"
Case 26 : ValueName.s = "Common Desktop"
Case 27 : ValueName.s = "Common Documents"
Case 28 : ValueName.s = "Common Favorites"
Case 29 : ValueName.s = "Common Programs"
Case 30 : ValueName.s = "Common Start Menu"
Case 31 : ValueName.s = "Common Startup"
Case 32 : ValueName.s = "Common Templates"
Case 33 : ValueName.s = "CommonMusic"
Case 34 : ValueName.s = "CommonPictures"
Case 35 : ValueName.s = "CommonVideo"
EndSelect
If RegOpenKeyEx_(OpenKey, SubKey, 0, #KEY_READ, @hKey)
MessageBeep_(#MB_ICONEXCLAMATION)
keyvalue = "Don't key exist!"
Else
If RegQueryValueEx_(hKey, ValueName, 0, 0, @keyvalue, @datasize)
keyvalue = ""
Else
keyvalue = Left(keyvalue, datasize - 1)
EndIf
RegCloseKey_(hKey)
EndIf
If Flag = 36
keyvalue = keyvalue + "\Microsoft\Internet Explorer\Quick Launch"
EndIf
If Right(keyvalue, 1) <> "\" : keyvalue = keyvalue + "\" : EndIf
ProcedureReturn keyvalue
EndProcedure
Procedure ComputerShutDown(Param.l)
#TOKEN_ADJUST_PRIVILEGES = 32
#TOKEN_QUERY = 8
#SE_PRIVILEGE_ENABLED = 2
#EWX_LOGOFF = 0
#EWX_SHUTDOWN = 1
#EWX_REBOOT = 2
#EWX_FORCE = 4
#EWX_POWEROFF = 8
Structure MyLUID
LowPart.l
HighPart.l
Attributes.l
EndStructure
Structure MyTOKEN
PrivilegeCount.l
LowPart.l
HighPart.l
Attributes.l
EndStructure
Protected hdlTokenHandle.l, tmpLuid.MyLUID, tkp.MyTOKEN, tkpNewButIgnored.MyTOKEN, lBufferNeeded.l
OpenProcessToken_(GetCurrentProcess_(), #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hdlTokenHandle)
SysName.s = "" + Chr(0)
Name.s = "SeShutdownPrivilege" + Chr(0)
LookupPrivilegeValue_(SysName, Name, @tmpLuid)
tmpLuid\Attributes = #SE_PRIVILEGE_ENABLED
tkp\PrivilegeCount = 1
tkp\LowPart = tmpLuid\LowPart
tkp\HighPart = tmpLuid\HighPart
tkp\Attributes = tmpLuid\Attributes
AdjustTokenPrivileges_(hdlTokenHandle, 0, @tkp, SizeOf(MyTOKEN), @tkpNewButIgnored, @lBufferNeeded)
Select Param ; Param = paramètre d'instinction de l'ordinateur
Case 1 : ExitWindowsEx_(#EWX_LOGOFF | #EWX_FORCE, 0) ; 1 = quitter session
Case 2 : ExitWindowsEx_(#EWX_SHUTDOWN | #EWX_FORCE, 0) ; 2 = arrêter
Case 3 : ExitWindowsEx_(#EWX_REBOOT | #EWX_FORCE, 0) ; 3 = redémarrer
EndSelect ; on se sert de 3 dans le cas qui nous intéresse
EndProcedure
;-----------------Registry functions
Procedure.l DeleteRegValue(topKey.l, sKeyName.s, sValueName.s)
GetHandle.l
hKey.l
lReturnCode.l
lhRemoteRegistry.l
If Left(sKeyName, 1) = "\"
sKeyName = Right(sKeyName, Len(sKeyName) - 1)
EndIf
GetHandle = RegOpenKeyEx_(topKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
If GetHandle = #ERROR_SUCCESS
GetHandle = RegDeleteValue_(hKey, @sValueName)
If GetHandle = #ERROR_SUCCESS
DeleteValue = #True
Else
DeleteValue = #False
EndIf
EndIf
RegCloseKey_(hKey)
ProcedureReturn DeleteValue
EndProcedure
Procedure.l CreateRegKey(topKey, sKeyName.s)
hNewKey.l
lpSecurityAttributes.SECURITY_ATTRIBUTES
GetHandle.l
lReturnCode.l
lhRemoteRegistry.l
If Left(sKeyName, 1) = "\"
sKeyName = Right(sKeyName, Len(sKeyName) - 1)
EndIf
GetHandle = RegCreateKeyEx_(topKey, sKeyName, 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, @lpSecurityAttributes, @hNewKey, @GetHandle)
If GetHandle = #ERROR_SUCCESS
GetHandle = RegCloseKey_(hNewKey)
CreateKey = #True
Else
CreateKey = #False
EndIf
ProcedureReturn CreateKey
EndProcedure
Procedure.l SetRegValue(topKey.l, sKeyName.s, sValueName.s, vValue.s, lType.l)
GetHandle.l
hKey.l
lType.l
lpcbData.l
lpData.s
lReturnCode.l
lhRemoteRegistry.l
If Left(sKeyName, 1) = "\"
sKeyName = Right(sKeyName, Len(sKeyName) - 1)
EndIf
GetHandle = RegOpenKeyEx_(topKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
If GetHandle = #ERROR_SUCCESS
lpcbData = 255
lpData = Space(255)
Select lType
Case #REG_SZ
GetHandle = RegSetValueEx_(hkey, sValueName, 0, #REG_SZ, @vValue, Len(vValue) + 1)
Case #REG_DWORD
lValue = Val(vValue)
GetHandle = RegSetValueEx_(hKey, sValueName, 0, #REG_DWORD, @lValue, 4)
EndSelect
RegCloseKey_(hkey)
ergebnis = 1
ProcedureReturn ergebnis
Else
RegCloseKey_(hKey)
ergebnis = 0
ProcedureReturn ergebnis
EndIf
EndProcedure
Procedure.s GetRegValue(topKey, sKeyName.s, sValueName.s)
GetHandle.l
hKey.l
lpData.s
lpDataDWORD.l
lpcbData.l
lType.l
lReturnCode.l
lhRemoteRegistry.l
Shared getRegValue.s
If Left(sKeyName, 1) = "\"
sKeyName = Right(sKeyName, Len(sKeyName) - 1)
EndIf
GetHandle = RegOpenKeyEx_(topKey, sKeyName, 0, #KEY_ALL_ACCESS, @hKey)
If GetHandle = #ERROR_SUCCESS
lpcbData = 255
lpData = Space(255)
GetHandle = RegQueryValueEx_(hKey, sValueName, 0, @lType, @lpData, @lpcbData)
If GetHandle = #ERROR_SUCCESS
Select lType
Case #REG_SZ
GetHandle = RegQueryValueEx_(hKey, sValueName, 0, @lType, @lpData, @lpcbData)
If GetHandle = 0
getRegValue = Left(lpData, lpcbData - 1)
Else
getRegValue = ""
EndIf
Case #REG_DWORD
GetHandle = RegQueryValueEx_(hKey, sValueName, 0, @lpType, @lpDataDWORD, @lpcbData)
If GetHandle = 0
getRegValue = Str(lpDataDWORD)
Else
getRegValue = "0"
EndIf
EndSelect
EndIf
EndIf
RegCloseKey_(hKey)
ProcedureReturn GetRegValue
EndProcedure
;-----------------Program functions
Procedure ActivateIndexDatCleaner()
; création de la clé de registre et des sous clés qui seront lues au redémarrage
; ceci à chaque modif des checkBox correspondantes
CreateRegKey(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName)
SetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "IndexDatCleaner actif", Str(GetGadgetState(#ActivateDeleteIndexDat)), #REG_DWORD)
SetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "Chk_TIF_IE5_INDEXDAT" , Str(GetGadgetState(#CHECK_TIF_IE5_INDEXDAT)), #REG_DWORD)
SetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "Chk_COOKIES_INDEXDAT" , Str(GetGadgetState(#CHECK_COOKIES_INDEXDAT)), #REG_DWORD)
SetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "Chk_HISTORY_IE5_INDEXDAT", Str(GetGadgetState(#CHECK_HISTORY_IE5_INDEXDAT)), #REG_DWORD)
SetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "Chk_HISTORY_IE5_URL_INDEXDAT", Str(GetGadgetState(#CHECK_HISTORY_IE5_URL_INDEXDAT)), #REG_DWORD)
EndProcedure
Procedure.l VerifIndexDatCleanerActivate() ; vérifie qu'IndexDatCleaner a été activé pour effectuer les tâches lors du prochain redémarrage
a.s = GetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "IndexDatCleaner actif")
ProcedureReturn Val(a)
EndProcedure
Procedure LoadIndexDatCleaner()
; Chargement des paramètres dans le programme
a.s = GetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "IndexDatCleaner actif")
b.s = GetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "Chk_TIF_IE5_INDEXDAT")
c.s = GetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "Chk_COOKIES_INDEXDAT")
d.s = GetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "Chk_HISTORY_IE5_INDEXDAT")
e.s = GetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "Chk_HISTORY_IE5_URL_INDEXDAT")
SetGadgetState(#ActivateDeleteIndexDat, Val(a))
SetGadgetState(#CHECK_TIF_IE5_INDEXDAT, Val(b))
SetGadgetState(#CHECK_COOKIES_INDEXDAT, Val(c))
SetGadgetState(#CHECK_HISTORY_IE5_INDEXDAT, Val(d))
SetGadgetState(#CHECK_HISTORY_IE5_URL_INDEXDAT, Val(e))
EndProcedure
Procedure CleanIndexDat() ; Fonction de nettoyage qu'on appellera dans un thread
;Récupération des valeurs du registre
a.s = GetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "IndexDatCleaner actif")
b.s = GetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "Chk_TIF_IE5_INDEXDAT")
c.s = GetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "Chk_COOKIES_INDEXDAT")
d.s = GetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "Chk_HISTORY_IE5_INDEXDAT")
e.s = GetRegValue(#HKEY_LOCAL_MACHINE, "Software\"+#ProgramName, "Chk_HISTORY_IE5_URL_INDEXDAT")
; actions en fonction des valeurs 1 = OK et 0 = NO
If Val(b) = 1
TIFFileDat.s = GetSystemDirectory(3)+"Content.IE5\index.dat"
If CreateFile(#NewTIFFileDat,TIFFileDat.s)
CloseFile(#NewTIFFileDat)
Res1$ = " OK ..\Content.IE5\index.dat > CLEAN-OUT - "+FormatDate("%dd/%mm/%yyyy à %hh:%ii:%ss", Date())
Else
Res1$ = " ERROR ..\Content.IE5\index.dat - CLEANING FAILED!"
EndIf
Else
Res1$ = " NO ..\Content.IE5\index.dat - CLEANING DISABLED"
EndIf
If Val(c) = 1
CookiesFileDat.s = GetSystemDirectory(5)+"index.dat"
If CreateFile(#NewCookiesFileDat,CookiesFileDat.s)
CloseFile(#NewCookiesFileDat)
Res2$ = " OK ..\Cookies\index.dat > CLEAN-OUT - "+FormatDate("%dd/%mm/%yyyy à %hh:%ii:%ss", Date())
Else
Res2$ = " ERROR ..\Cookies\index.dat - CLEANING FAILED!"
EndIf
Else
Res2$ = " NO ..\Cookies\index.dat - CLEANING DISABLED"
EndIf
If Val(d) = 1
HistoryFileDat.s = GetSystemDirectory(9)+"History.IE5\index.dat"
If CreateFile(#NewHistoryFileDat,HistoryFileDat.s)
CloseFile(#NewHistoryFileDat)
Res3$ = " OK ..\History.IE5\index.dat > CLEAN-OUT - "+FormatDate("%dd/%mm/%yyyy à %hh:%ii:%ss", Date())
Else
Res3$ = " ERROR ..\History.IE5\index.dat - CLEANING FAILED!"
EndIf
Else
Res3$ = " NO ..\History.IE5\index.dat - CLEANING DISABLED"
EndIf
If Val(e) = 1
If DeleteDirectory(GetSystemDirectory(9)+"History.IE5","*.*",#PB_FileSystem_Recursive|#PB_FileSystem_Force)
CreateDirectory(GetSystemDirectory(9)+"History.IE5")
Res4$ = " OK ..\History.IE5\<DateFolder>\index.dat > CLEAN-OUT - "+FormatDate("%dd/%mm/%yyyy à %hh:%ii:%ss", Date())
Else
Res4$ = " ERROR ..\History.IE5\<DateFolder>\index.dat - INCOMPLETE CLEANING!"
EndIf
Else
Res4$ = " NO ..\History.IE5\<DateFolder>\index.dat - CLEANING DISABLED"
EndIf
Createlog = CreatePreferences(GetHomeDirectory()+"idatc.ini") ; création du log dans le dossier temp utilisateur
If Createlog <>0
WritePreferenceString("tifiles",Res1$)
WritePreferenceString("cookies",Res2$)
WritePreferenceString("history",Res3$)
WritePreferenceString("Urlhistory",Res4$)
ClosePreferences()
EndIf
SetGadgetState(#ActivateDeleteIndexDat,0) ; désactive IndexDatCleaner aprés travail
ActivateIndexDatCleaner(); enregistre nouvelles données registre
End
EndProcedure
;-----------------Search Index.Dat files
Declare SearchDatInDirectory(Path.s,Mask.s)
Declare SearchFiles(Path.s,Mask.s)
ProcedureDLL SearchFilesInit(Path.s,Mask.s,Recurse.l)
; Recurse = 1 : Scan SubDirectories of Path
; Recurse = 0 : Don't scan Subdirectories of Path
Static Flag.l
If Flag=0
Global NewList Fichiers.s()
Flag=1
Else
ClearList(Fichiers())
EndIf
SearchFiles(Path,Mask)
If Recurse
SearchDatInDirectory(Path,Mask)
EndIf
ProcedureReturn CountList(Fichiers())
EndProcedure
Procedure SearchFiles(Path.s,Mask.s)
If Right(Path,1)<>"\" : Path+"\":EndIf
lpFindFileData.WIN32_FIND_DATA
Recherche.s=Path+Mask
handle.l = FindFirstFile_(Recherche, @lpFindFileData)
If handle <> #INVALID_HANDLE_VALUE
Repeat
Trouve.s=PeekS(@lpFindFileData\cFileName)
If lpFindFileData\dwFileAttributes & #FILE_ATTRIBUTE_DIRECTORY =#False
AddElement(Fichiers.s())
Fichiers()=Path+Trouve
EndIf
Until FindNextFile_(handle, @lpFindFileData)= #False
FindClose_(handle)
EndIf
EndProcedure
Procedure SearchDatInDirectory(Path.s,Mask.s)
If Right(Path,1)<>"\" : Path+"\":EndIf
lpFindFileData.WIN32_FIND_DATA
Recherche.s=Path+"*.*"
handle.l = FindFirstFile_(Recherche, @lpFindFileData)
If handle <> #INVALID_HANDLE_VALUE
Repeat
Trouve.s=PeekS(@lpFindFileData\cFileName)
If lpFindFileData\dwFileAttributes & #FILE_ATTRIBUTE_DIRECTORY
If Trouve <>"." And Trouve <>".."
SearchDatInDirectory(Path+Trouve,Mask)
SearchFiles(Path+Trouve,Mask)
EndIf
EndIf
Until FindNextFile_(handle, @lpFindFileData)= #False
FindClose_(handle)
EndIf
EndProcedure
ProcedureDLL.s SearchFilesGet()
Static Pointeur
If Pointeur >= CountList(Fichiers())
Pointeur=0
Else
SelectElement(Fichiers(),Pointeur)
Retour.s=Fichiers()
Pointeur+1
EndIf
ProcedureReturn Retour.s
EndProcedure
;-Main window
ExamineDesktops()
Largeur$ = Str(DesktopWidth(0))
Hauteur$ = Str(DesktopHeight(0))
If Val(Largeur$)>800 And Val(Hauteur$)>600
FlagWin = #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_TitleBar
Else
FlagWin = #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar
EndIf
If OpenWindow(#WIN_IndexDatCleaner,0,0,790,550,#ProgramName ,FlagWin)=0 Or CreateGadgetList(WindowID(#WIN_IndexDatCleaner))=0
End
EndIf
Frame3DGadget(#FramePrefsDatFiles,5,5,775,360,"Nettoyage des fichiers Index.Dat verrouillés")
TextGadget(#Text_PrefsDatFiles, 30,30,720,15,"Sélectionnez les fichiers de traces Internet Explorer à nettoyer au prochain démarrage de Windows")
SetGadgetFont(#Text_PrefsDatFiles, Font0)
CheckBoxGadget(#CHECK_TIF_IE5_INDEXDAT, 30, 70, 500, 20, " Index.Dat dans ..\Temporary Internet Files ( historique des sites visités et fichiers consultés )")
TextGadget(#Text_SizeOf_TIFIE5_INDEXDAT, 640,72,120,20,"");,#PB_Text_Center)
SetGadgetColor(#Text_SizeOf_TIFIE5_INDEXDAT, #PB_Gadget_FrontColor, RGB(143, 170, 184))
SetGadgetFont(#Text_SizeOf_TIFIE5_INDEXDAT, Font0)
CheckBoxGadget(#CHECK_COOKIES_INDEXDAT, 30, 100, 500, 20, " Index.Dat dans ..\Cookies ( traces des cookies enregistrés sur le disque )")
TextGadget(#Text_SizeOf_COOKIES_INDEXDAT, 640,102,120,20,"");,#PB_Text_Center)
SetGadgetColor(#Text_SizeOf_COOKIES_INDEXDAT, #PB_Gadget_FrontColor, RGB(143, 170, 184))
SetGadgetFont(#Text_SizeOf_COOKIES_INDEXDAT, Font0)
CheckBoxGadget(#CHECK_HISTORY_IE5_INDEXDAT, 30, 130, 500, 20, " Index.Dat dans ..\History.IE5 ( historique Windows )")
TextGadget(#Text_SizeOf_HISTORY_INDEXDAT, 640,132,120,20,"");,#PB_Text_Center)
SetGadgetColor(#Text_SizeOf_HISTORY_INDEXDAT, #PB_Gadget_FrontColor, RGB(143, 170, 184))
SetGadgetFont(#Text_SizeOf_HISTORY_INDEXDAT, Font0)
CheckBoxGadget(#CHECK_HISTORY_IE5_URL_INDEXDAT, 30, 170, 500, 20, " Index.Dat dans ..\History.IE5\<DossierDate>\ ( historique par période des urls visitées )")
ButtonGadget(#BtnScanUrlIndexDat,640,168,120,25,"Actualiser")
GadgetToolTip(#BtnScanUrlIndexDat, "Analyser et afficher les fichiers de l'historique")
ListIconGadget(#ListIconUrlIndexDatFiles,30,200,730,150,"Fichiers Index.Dat trouvés dans les sous-répertoires de l'historique",725)
TextGadget(#Text_LastProcessDatFiles, 5,385,200,15,"Dernière exécution des tâches :")
SetGadgetColor(#Text_LastProcessDatFiles, #PB_Gadget_FrontColor, RGB(143, 170, 184))
ContainerGadget(#Container_Resultat, 5,400,470,100,#PB_Container_Single)
TextGadget(#TxtResultat_1,10,5,450,15,"")
TextGadget(#TxtResultat_2,10,25,450,15,"")
TextGadget(#TxtResultat_3,10,45,450,15,"")
TextGadget(#TxtResultat_4,10,65,450,15,"")
CloseGadgetList()
Frame3DGadget(#FrameActivateDatFiles,480,390,300,110,"Activation")
CheckBoxGadget(#ActivateDeleteIndexDat, 530, 420, 240, 20, " Activer l'exécution des tâches sélectionnées")
GadgetToolTip(#ActivateDeleteIndexDat, "Cocher pour activer / Décocher pour désactiver")
TextGadget(#Text_ActivateDeleteIndexDat, 500,455,260,30,"( Tant que le processus est activé, celui-ci sera exécuté à chaque démarrage du système. )")
SetGadgetColor(#Text_ActivateDeleteIndexDat, #PB_Gadget_FrontColor, RGB(143, 170, 184))
ButtonGadget(#BtnReboot,10,510,120,25,"Redémarrer")
GadgetToolTip(#BtnReboot, "Redémarrer Windows maintenant en appliquant les actions choisies")
ButtonGadget(#BtnCancel,400,510,120,25,"Annuler")
GadgetToolTip(#BtnCancel, "Annuler les actions avant de quitter "+#ProgramName)
ButtonGadget(#BtnQuit,660,510,120,25,"Quitter")
GadgetToolTip(#BtnQuit, "Quitter "+#ProgramName+". Si l'activation est cochée, le programme s'exécutera au prochain démarrage.")
If FileSize(GetSystemDirectory(3)+"Content.IE5\index.dat") <> -1
TIFDatSize$ = Str(FileSize(GetSystemDirectory(3)+"Content.IE5\index.dat")/1024)
SetGadgetText(#Text_SizeOf_TIFIE5_INDEXDAT,"Taille : "+TIFDatSize$+" ko")
EndIf
If FileSize(GetSystemDirectory(5)+"index.dat") <> -1
CookiesDatSize$ = Str(FileSize(GetSystemDirectory(5)+"index.dat")/1024)
SetGadgetText(#Text_SizeOf_COOKIES_INDEXDAT,"Taille : "+CookiesDatSize$+" ko")
EndIf
If FileSize(GetSystemDirectory(9)+"History.IE5\index.dat") <> -1
HistoryDatSize$ = Str(FileSize(GetSystemDirectory(9)+"History.IE5\index.dat")/1024)
SetGadgetText(#Text_SizeOf_HISTORY_INDEXDAT,"Taille : "+HistoryDatSize$+" ko")
EndIf
; si le log existe, créé lors d'un précédent lancement, on charge les données pour les afficher
If FileSize(GetHomeDirectory()+"idatc.ini")<>-1
If OpenPreferences(GetHomeDirectory()+"idatc.ini")<>0
Res1$ = ReadPreferenceString("tifiles", "")
Res2$ = ReadPreferenceString("cookies", "")
Res3$ = ReadPreferenceString("history", "")
Res4$ = ReadPreferenceString("Urlhistory", "")
SetGadgetText(#TxtResultat_1,Res1$)
SetGadgetText(#TxtResultat_2,Res2$)
SetGadgetText(#TxtResultat_3,Res3$)
SetGadgetText(#TxtResultat_4,Res4$)
ClosePreferences()
EndIf
Else
SetGadgetText(#TxtResultat_1,"Aucun nettoyage n'a encore été effectué")
EndIf
;Vérification de l'activation, chargement des paramètres
;Lancement du thread de nettoyage si activé
If VerifIndexDatCleanerActivate() = 1
LoadIndexDatCleaner()
CreateThread(@CleanIndexDat(),0)
EndIf
;-Event loop
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #CHECK_TIF_IE5_INDEXDAT : ActivateIndexDatCleaner()
Case #CHECK_COOKIES_INDEXDAT : ActivateIndexDatCleaner()
Case #CHECK_HISTORY_IE5_INDEXDAT : ActivateIndexDatCleaner()
Case #CHECK_HISTORY_IE5_URL_INDEXDAT : ActivateIndexDatCleaner()
Case #BtnScanUrlIndexDat ; Vérifie et affiche les fichiers index.dat s'il y a dans l'historique
ClearGadgetItemList(#ListIconUrlIndexDatFiles)
NbFiles=SearchFilesInit(GetSystemDirectory(9)+"History.IE5\","index.dat",1)
Text.s=Str(NbFiles)+" Fichiers Index.Dat trouvés dans les sous-répertoires de l'historique"
Repeat
File.s=SearchFilesGet()
If File="" : Break : EndIf
AddGadgetItem(#ListIconUrlIndexDatFiles, -1, File)
SetGadgetItemText(#ListIconUrlIndexDatFiles, -1, Text, 0)
ForEver
Case #ActivateDeleteIndexDat ; Activation par inscription dans le resgistre. lancement au redémarrage
If GetGadgetState(#ActivateDeleteIndexDat) = 1
If RegCreateKeyEx_(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run", 0, 0, #REG_OPTION_NON_VOLATILE, #KEY_ALL_ACCESS, 0, @NewKey, @KeyInfo) = #ERROR_SUCCESS
StringBuffer$ = REP$+"IndexDatCleaner.exe"
RegSetValueEx_(NewKey, "IndexDatCleaner", 0, #REG_SZ, StringBuffer$, Len(StringBuffer$)+1)
RegCloseKey_(NewKey)
EndIf
Else
DeleteRegValue(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run", "IndexDatCleaner")
EndIf
ActivateIndexDatCleaner()
Case #BtnReboot : ComputerShutDown(3) ; redémarrer de suite
Case #BtnCancel ; annule les checkbox et l'activation avant de fermer
SetGadgetState(#CHECK_TIF_IE5_INDEXDAT,0)
SetGadgetState(#CHECK_COOKIES_INDEXDAT,0)
SetGadgetState(#CHECK_HISTORY_IE5_INDEXDAT,0)
SetGadgetState(#CHECK_HISTORY_IE5_URL_INDEXDAT,0)
SetGadgetState(#ActivateDeleteIndexDat,0)
DeleteRegValue(#HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Run", "IndexDatCleaner")
ActivateIndexDatCleaner()
Event = #PB_Event_CloseWindow
Case #BtnQuit
Event = #PB_Event_CloseWindow
;- END
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
End