Gestionnaire (lecture et suppression) du cache internet (cookies,url,historique)

Description

il permet de lire et de supprimer (tout ou par elements) l'historique, les url du cache, et les cookies. (accesoirement montre la methode pour mettre une icone dans le Systray)

NOUVELLE VERSION : possibilité de copie un fichier présent dans le cache dans un autre répertoire

Source / Exemple :


'voici le code du module de gestion du cache,historique et cookies

'contantes pour les fonctions de gestion du cache
Public Const ERROR_CACHE_FIND_FAIL As Long = 0
Public Const ERROR_CACHE_FIND_SUCCESS As Long = 1
Public Const ERROR_FILE_NOT_FOUND As Long = 2
Public Const ERROR_ACCESS_DENIED As Long = 5
Public Const ERROR_INSUFFICIENT_BUFFER As Long = 122
Public Const MAX_PATH As Long = 260
Public Const MAX_CACHE_ENTRY_INFO_SIZE As Long = 4096

'constantes de gestion de la mémoire
Public Const LMEM_FIXED As Long = &H0
Public Const LMEM_ZEROINIT As Long = &H40
Public Const LPTR As Long = (LMEM_FIXED Or LMEM_ZEROINIT)

'types d'entrée du cache
Public Const NORMAL_CACHE_ENTRY As Long = &H1
Public Const EDITED_CACHE_ENTRY As Long = &H8
Public Const TRACK_OFFLINE_CACHE_ENTRY As Long = &H10
Public Const TRACK_ONLINE_CACHE_ENTRY As Long = &H20
Public Const STICKY_CACHE_ENTRY As Long = &H40
Public Const SPARSE_CACHE_ENTRY As Long = &H10000
Public Const COOKIE_CACHE_ENTRY As Long = &H100000
Public Const URLHISTORY_CACHE_ENTRY As Long = &H200000
Public Const URLCACHE_FIND_DEFAULT_FILTER As Long = NORMAL_CACHE_ENTRY Or _
                                                    COOKIE_CACHE_ENTRY Or _
                                                    URLHISTORY_CACHE_ENTRY Or _
                                                    TRACK_OFFLINE_CACHE_ENTRY Or _
                                                    TRACK_ONLINE_CACHE_ENTRY Or _
                                                    STICKY_CACHE_ENTRY
'Dates
Private Type SYSTEMTIME
        wYear As Integer
        wMonth As Integer
        wDayOfWeek As Integer
        wDay As Integer
        wHour As Integer
        wMinute As Integer
        wSecond As Integer
        wMilliseconds As Integer
End Type
Private Type FILETIME
   dwLowDateTime As Long
   dwHighDateTime As Long
End Type
'une entrée du cache
Private Type INTERNET_CACHE_ENTRY_INFO
   dwStructSize As Long
   lpszSourceUrlName As Long
   lpszLocalFileName As Long
   CacheEntryType  As Long
   dwUseCount As Long
   dwHitRate As Long
   dwSizeLow As Long
   dwSizeHigh As Long
   LastModifiedTime As FILETIME
   ExpireTime As FILETIME
   LastAccessTime As FILETIME
   LastSyncTime As FILETIME
   lpHeaderInfo As Long
   dwHeaderInfoSize As Long
   lpszFileExtension As Long
   dwExemptDelta  As Long
End Type
Public Type Internet_Cache_Entry
   'dwStructSize As Long
   SourceUrlName As String
   LocalFileName As String
   'CacheEntryType  As Long
   UseCount As Long
   HitRate As Long
   Size As Long
   'dwSizeHigh As Long
   LastModifiedTime As Date
   ExpireTime As Date
   LastAccessTime As Date
   LastSyncTime As Date
   HeaderInfo As String
   'dwHeaderInfoSize As Long
   FileExtension As String
   'ExemptDelta  As Long
End Type

'==============================================================================
'     Déclarations API

Private Declare Function FileTimeToLocalFileTime Lib "KERNEL32" (lpFileTime As FILETIME, lpLocalFileTime As FILETIME) As Long
Private Declare Function FileTimeToSystemTime Lib "KERNEL32" (lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME) As Long
Private Declare Function LocalFileTimeToFileTime Lib "KERNEL32" (lpLocalFileTime As FILETIME, lpFileTime As FILETIME) As Long
Private Declare Function SystemTimeToFileTime Lib "KERNEL32" (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long

'on cherche la premiere entrée
Private Declare Function FindFirstUrlCacheEntry Lib "Wininet.dll" _
   Alias "FindFirstUrlCacheEntryA" _
  (ByVal lpszUrlSearchPattern As String, _
   lpFirstCacheEntryInfo As Any, _
   lpdwFirstCacheEntryInfoBufferSize As Long) As Long

'on cherche l'entrée suivante
Private Declare Function FindNextUrlCacheEntry Lib "Wininet.dll" _
   Alias "FindNextUrlCacheEntryA" _
  (ByVal hEnumHandle As Long, _
   lpNextCacheEntryInfo As Any, _
   lpdwNextCacheEntryInfoBufferSize As Long) As Long

'on ferme le cache
Private Declare Function FindCloseUrlCache Lib "Wininet.dll" _
   (ByVal hEnumHandle As Long) As Long

'on supprime une entrée du cache
Public Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _
   Alias "DeleteUrlCacheEntryA" _
  (ByVal lpszUrlName As String) As Long
   
'copier la mémoire
Private Declare Sub CopyMemory Lib "KERNEL32" _
   Alias "RtlMoveMemory" _
   (pDest As Any, _
    pSource As Any, _
    ByVal dwLength As Long)

'fonction pour les chaines de caracteres
Private Declare Function lstrcpyA Lib "KERNEL32" _
  (ByVal RetVal As String, ByVal Ptr As Long) As Long
                        
Private Declare Function lstrlenA Lib "KERNEL32" _
  (ByVal Ptr As Any) As Long
  
Private Declare Function LocalAlloc Lib "KERNEL32" _
   (ByVal uFlags As Long, _
    ByVal uBytes As Long) As Long
    
Private Declare Function LocalFree Lib "KERNEL32" _
   (ByVal hMem As Long) As Long

'fonction qui retrouve toutes les entrées du cache internet
'URL contient un tableau des entrées page internet du cache
'URLHistory contient un tableau de l'historique des pages visitées
'Cookies contient un tableau des cookies
Public Function GetURLCache(URL() As Internet_Cache_Entry, URLHistory() As Internet_Cache_Entry, Cookies() As Internet_Cache_Entry)
   Dim ICEI As INTERNET_CACHE_ENTRY_INFO 'variable temporaire de stockage de l'entrée du cache
   Dim hFile As Long 'handle du fichier de l'entrée du cache
   Dim dwBuffer As Long 'taille du buffer
   Dim pntrICE As Long 'pointeur vers un Internet_cache_entry_info
   
   dwBuffer = 0 'on initialise la taille du buffer
   ReDim URL(0) 'on initialise les tableau
   ReDim URLHistory(0)
   ReDim Cookies(0)
   hFile = FindFirstUrlCacheEntry(0&, ByVal 0, dwBuffer) ' on cherche la taille de la premiere entrée du cache
   If (hFile = ERROR_CACHE_FIND_FAIL) And _
      (Err.LastDllError = ERROR_INSUFFICIENT_BUFFER) Then ' s'il y a une erreur retournée dwBuffer contient alors la taille du buffer
      pntrICE = LocalAlloc(LMEM_FIXED, dwBuffer) 'on alloue de la mémoire
      If pntrICE Then ' s'il n'y a pas d'erreurs
         CopyMemory ByVal pntrICE, dwBuffer, 4 ' on copie dans la mémoire allouée la taille du buffer dans le membre dwStructSize (le premier long de la structure)
         hFile = FindFirstUrlCacheEntry(vbNullString, ByVal pntrICE, dwBuffer) 'on cherche
         If hFile <> ERROR_CACHE_FIND_FAIL Then 's'il y a des fichiers dans le cache
            Do
               CopyMemory ICEI, ByVal pntrICE, Len(ICEI) ' on copie les données renvoyées par la fonction précédemment appellée
               If (ICEI.CacheEntryType And _
                   NORMAL_CACHE_ENTRY) = NORMAL_CACHE_ENTRY Then ' si c une entrée normale
                 Select Case ICEI.CacheEntryType
                  Case URLHISTORY_CACHE_ENTRY + NORMAL_CACHE_ENTRY ' si c une entrée du l'historique
                  ReDim Preserve URLHistory(UBound(URLHistory) + 1) 'on ajoute une entrée dans le tableau
                  'on copie toutes les infos
                  URLHistory(UBound(URLHistory) - 1).SourceUrlName = GetStrFromPtrA(ICEI.lpszSourceUrlName)
                  URLHistory(UBound(URLHistory) - 1).LocalFileName = GetStrFromPtrA(ICEI.lpszLocalFileName)
                  URLHistory(UBound(URLHistory) - 1).FileExtension = GetStrFromPtrA(ICEI.lpszFileExtension)
                  URLHistory(UBound(URLHistory) - 1).HeaderInfo = GetStrFromPtrA(ICEI.lpHeaderInfo)
                  URLHistory(UBound(URLHistory) - 1).HitRate = ICEI.dwHitRate
                  URLHistory(UBound(URLHistory) - 1).ExpireTime = FileTime2SystemTime(ICEI.ExpireTime)
                  URLHistory(UBound(URLHistory) - 1).LastAccessTime = FileTime2SystemTime(ICEI.LastAccessTime)
                  URLHistory(UBound(URLHistory) - 1).LastModifiedTime = FileTime2SystemTime(ICEI.LastModifiedTime)
                  URLHistory(UBound(URLHistory) - 1).LastSyncTime = FileTime2SystemTime(ICEI.LastSyncTime)
                  URLHistory(UBound(URLHistory) - 1).Size = ICEI.dwSizeHigh * 2 ^ 32 + ICEI.dwSizeLow
                  URLHistory(UBound(URLHistory) - 1).UseCount = ICEI.dwUseCount
                  Case COOKIE_CACHE_ENTRY + NORMAL_CACHE_ENTRY 'si c un cookie
                  ReDim Preserve Cookies(UBound(Cookies) + 1) 'on ajoute une entrée dans le tableau
                  'on copie toutes les infos
                  Cookies(UBound(Cookies) - 1).SourceUrlName = GetStrFromPtrA(ICEI.lpszSourceUrlName)
                  Cookies(UBound(Cookies) - 1).LocalFileName = GetStrFromPtrA(ICEI.lpszLocalFileName)
                  Cookies(UBound(Cookies) - 1).FileExtension = GetStrFromPtrA(ICEI.lpszFileExtension)
                  Cookies(UBound(Cookies) - 1).HeaderInfo = GetStrFromPtrA(ICEI.lpHeaderInfo)
                  Cookies(UBound(Cookies) - 1).HitRate = ICEI.dwHitRate
                  Cookies(UBound(Cookies) - 1).ExpireTime = FileTime2SystemTime(ICEI.ExpireTime)
                  Cookies(UBound(Cookies) - 1).LastAccessTime = FileTime2SystemTime(ICEI.LastAccessTime)
                  Cookies(UBound(Cookies) - 1).LastModifiedTime = FileTime2SystemTime(ICEI.LastModifiedTime)
                  Cookies(UBound(Cookies) - 1).LastSyncTime = FileTime2SystemTime(ICEI.LastSyncTime)
                  Cookies(UBound(Cookies) - 1).Size = ICEI.dwSizeHigh * 2 ^ 32 + ICEI.dwSizeLow
                  Cookies(UBound(Cookies) - 1).UseCount = ICEI.dwUseCount
                  Case Else 'sinon
                  ReDim Preserve URL(UBound(URL) + 1) 'on ajoute une entrée dans le tableau
                  'on copie toutes les infos
                  URL(UBound(URL) - 1).SourceUrlName = GetStrFromPtrA(ICEI.lpszSourceUrlName)
                  URL(UBound(URL) - 1).LocalFileName = GetStrFromPtrA(ICEI.lpszLocalFileName)
                  URL(UBound(URL) - 1).FileExtension = GetStrFromPtrA(ICEI.lpszFileExtension)
                  URL(UBound(URL) - 1).HeaderInfo = GetStrFromPtrA(ICEI.lpHeaderInfo)
                  URL(UBound(URL) - 1).HitRate = ICEI.dwHitRate
                  URL(UBound(URL) - 1).ExpireTime = FileTime2SystemTime(ICEI.ExpireTime)
                  URL(UBound(URL) - 1).LastAccessTime = FileTime2SystemTime(ICEI.LastAccessTime)
                  URL(UBound(URL) - 1).LastModifiedTime = FileTime2SystemTime(ICEI.LastModifiedTime)
                  URL(UBound(URL) - 1).LastSyncTime = FileTime2SystemTime(ICEI.LastSyncTime)
                  URL(UBound(URL) - 1).Size = ICEI.dwSizeHigh * 2 ^ 32 + ICEI.dwSizeLow
                  URL(UBound(URL) - 1).UseCount = ICEI.dwUseCount
                 End Select
                 'on laisse l'application respirer
                 DoEvents
               End If
               'on libère la mémoire allouée
               Call LocalFree(pntrICE)
               'on met la taille du buffer à 0
               dwBuffer = 0
               'on cherche la taille de l'entrée suivante
               Call FindNextUrlCacheEntry(hFile, ByVal 0, dwBuffer)
               'on alloue à nouveau de la mémoire
               pntrICE = LocalAlloc(LMEM_FIXED, dwBuffer)
               'on copie la taille de la mémire allouée dans le premier membre du buffer
               CopyMemory ByVal pntrICE, dwBuffer, 4
            Loop While FindNextUrlCacheEntry(hFile, ByVal pntrICE, dwBuffer) 'on cherche l'entrée suivante
         End If
      End If
   End If
   'on libère le pointeur
   Call LocalFree(pntrICE)
   'on ferme le cache
   Call FindCloseUrlCache(hFile)
End Function

'fonction servant à copier la chaine de caractere dont on a le pointeur
Private Function GetStrFromPtrA(ByVal lpszA As Long) As String
    'on prépare un buffer de la taille de la chaine
   GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0)
   'on copie la chaine
   Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)
End Function

'fonction servant à convertir une structure FILETIME en Date
Private Function FileTime2SystemTime(FileT As FILETIME) As Date
Dim SysT As SYSTEMTIME 'buffer de convertion
FileTimeToLocalFileTime FileT, FileT 'on convertie la date en date locale
FileTimeToSystemTime FileT, SysT 'on convertie le FILETIME en SYSTEMTIME
'on convertie en date
FileTime2SystemTime = TimeSerial(SysT.wHour, SysT.wMinute, SysT.wSecond) + DateSerial(SysT.wYear, SysT.wMonth, SysT.wDay)
End Function

'on supprime les entrées dans Liste()
Public Function DeleteUrlCache(Liste() As Internet_Cache_Entry, Optional Excludes As String) As Boolean
Dim X As Long ' un compteur

For X = LBound(Liste) To UBound(Liste) - 1
If InStr(Excludes, Liste(X).SourceUrlName) = 0 Then
'si l'entrée n'est pas dans la liste d'exclusion, on supprime
DeleteUrlCache = DeleteUrlCacheEntry(Liste(X).SourceUrlName)
End If
Next X
End Function

Conclusion :


Fonctionne sous XP mais l'historique n'est pas toujours supprimer et lu en entier.
N'hésitez pas a faire des remarques (compatibilité win 98 95 2000...).

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.