Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD8] Navigateur WebBrowser : comment supprimer les fichiers temporaires et les cookies

6 réponses
Avatar
Georges PEYRE
Bonjour,

Dans une fenêtre Windev utilisant l'Activex Navigate de WebBrowser je
voudrai créér un bouton permettant de lancer la suppression des
fichiers temporaires internet et un bouton permettant de lancer la
suppression des cookies comme ceux qui existent dans la fenêtre Options
de Internet Explorer.

Je ne trouve pas dans la liste des OLECMDID de WebBrowser une commande
permettant d'exécuter ces suppressions.

Je recherche le code qui me permettrait de réaliser ces suppressions.

Merci d'avance

--
Elle est pas belle la vie ?

6 réponses

Avatar
Romain PETIT
Georges PEYRE vient de nous annoncer :
Bonjour,



Bonjour,

[...]
Je recherche le code qui me permettrait de réaliser ces suppressions.



Voir les archives :

http://minilien.com/?oxGmoiLgfD
ou
http://groups.google.fr/groups?hl=fr&lr=&ie=UTF-8&threadm=mesnews.b56c7d3c.4980064f.415.2191%40Signature.fin&rnum=1&prev=/groups%3Fsourceid%3Dnavclient%26hl%3Dfr%26ie%3DUTF-8%26oe%3DUTF-8%26q%3DFindNextUrlCacheEntryA

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Georges PEYRE
Bonjour Romain,

Romain PETIT a pensé très fort :

Voir les archives :

http://minilien.com/?oxGmoiLgfD
ou
http://groups.google.fr/groups?hl=fr&lr=&ie=UTF-8&threadm=mesnews.b56c7d3c.4980064f.415.2191%40Signature.fin&rnum=1&prev=/groups%3Fsourceid%3Dnavclient%26hl%3Dfr%26ie%3DUTF-8%26oe%3DUTF-8%26q%3DFindNextUrlCacheEntryA

A+



J'ai récupéré le code suivant mais il plante : est-ce que j'ai bien
tout récupéré mais en supprimant le code lié à la condition Efface car
je ne sais pas à quoi celà correspond

________________________________________________________________________________________________________

// CODE RECUPERE //////////////////////////////

LMEM_FIXED est un entier = 0
NORMAL_CACHE_ENTRY est un entier = 1

FILETIME est une structure
dwLowDateTime est un entier
dwHighDateTime est un entier
FIN

INTERNET_CACHE_ENTRY_INFO est une structure
dwStructSize est un entier
lpszSourceUrlName est un entier
lpszLocalFileName est un entier
CacheEntryType est un entier
dwUseCount est un entier
dwHitRate est un entier
dwSizeLow est un entier
dwSizeHigh est un entier
LastModifiedTime est un FILETIME
ExpireTime est un FILETIME
LastAccessTime est un FILETIME
LastSyncTime est un FILETIME
lpHeaderInfo est un entier
dwHeaderInfoSize est un entier
lpszFileExtension est un entier
dwExemptDelta est un entier
szRestOfData est un tableau fixe de 1024 entier
FIN

ICEI est un INTERNET_CACHE_ENTRY_INFO
hFile est un entier
cachefile est une chaîne ASCIIZ sur 260 // MAX_PATH
dwBuffer est un entier sans signe sur 4 octets
pntrICE est un entier

ListeSupprimeTout(Liste1)

ChargeDLL("wininet.dll")

ICEI:dwStructSize = 80
dwBuffer = 2048
hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", Null, &ICEI,
&dwBuffer)
SI hFile <= 0 ALORS RETOUR

BOUCLE

SI ETBinaire(ICEI:CacheEntryType,NORMAL_CACHE_ENTRY) =
NORMAL_CACHE_ENTRY ALORS
AppelDLL32("kernel32","lstrcpyA", &cachefile, ICEI:lpszSourceUrlName)
ListeAjoute(Liste1, "! "+ cachefile)
FIN

//SI Efface ALORS
// IF
AppelDLL32("wininet","DeleteUrlCacheEntry",ICEI:lpszSourceUrlName) <> 0
ALORS
// ListeModifie(Liste,"- "+cachefile,ListeOccurrence(Liste))
//FIN
//FIN


dwBuffer = 2048
SI PAS AppelDLL32("wininet","FindNextUrlCacheEntryA", hFile, &ICEI,
&dwBuffer) ALORS SORTIR

SI ErreurInfo(errCodeSystème) = 259 ALORS SORTIR // NO_MORE_ITEM

FIN

AppelDLL32("wininet","FindCloseUrlCache", hFile)


____________________________________________________________________________________________________

PLANTAGE

Une erreur est survenue au moment de l'ouverture de la fenêtre
'Fenêtre27'.
Une erreur système inattendue est survenue.
Si cet incident se produit de manière systématique lorsque vous
exécutez les mêmes manipulations, il est conseillé de transmettre au
Support Technique Gratuit :
- une description des circonstances de l'incident
- les lignes de code, une fenêtre ou un projet permettant de
reproduire le problème
- les informations techniques suivantes

Détails techniques :

Module : WD80VM.DLL
Version du module : 8.00Jv
VI : 01-80315j
Adresse de base : 25E60000
Erreur système : Access violation (GPF)
EIP = 25E61BB0
OS : Windows 98 A (4.10.67766446)


**********************************************

Informations techniques

Projet : Test

Dump de l'erreur du module <WD80VM.DLL> <8.00Jv>.

- Appel WL :
Fonction <>, n° de syntaxe <0>

- Niveau : erreur fatale (EL_FATAL)

- Code erreur : 1020

- Code erreur WD55 : 0

- Pas de code d'erreur système

- Pas de message d'erreur système

- Que s'est-il passé ?
Une erreur est survenue au moment de l'ouverture de la fenêtre
'Fenêtre27'.
Une erreur système inattendue est survenue.
Si cet incident se produit de manière systématique lorsque vous
exécutez les mêmes manipulations, il est conseillé de transmettre au
Support Technique Gratuit :
- une description des circonstances de l'incident
- les lignes de code, une fenêtre ou un projet permettant de
reproduire le problème
- les informations techniques suivantes

Détails techniques :

Module : WD80VM.DLL
Version du module : 8.00Jv
VI : 01-80315j
Adresse de base : 25E60000
Erreur système : Access violation (GPF)
EIP = 25E61BB0
OS : Windows 98 A (4.10.67766446)

- Infos de debug :
Registres :

EIP = 25E61BB0 EBP = 009A3E00
EAX = 00889464 EBX = 00C40060
ECX = 7073612E EDX = 00000004
ESI = 008AA140 EDI = 25F2F158

Pile des appels :

[WD80VM.DLL (25E60000), 8.00Jv, 01-80315j ] 25E61BB0
[???] 0088949C-> INVALID, stack increased by 4
[WDTST.EXE (00000000), 8.00Bda, 01-80315j ] 00001168-> INVALID, stack
increased by 4
[???] 008882FC-> INVALID, stack increased by 4
[???] 00889480-> INVALID, stack increased by 4
[WDTST.EXE (00000000), 8.00Bda, 01-80315j ] ????-> INVALID, stack
increased by 4


- Pas d'info attachée

- Identifiant dans le .err : 1020

____________________________________________________

Je suis sous W98SE

Si tu as une idée de la raison du plantage

Cordialement

--
Elle est pas belle la vie ?
Avatar
Georges PEYRE
Bonjour,

Ce code plante en fin d'exécution parce qu'il n'y a pas de détection de
la fin de lecture du contenu
fichier index.dat.

Mon test :
J'ai ajouté un comptage des url lus : j'en compte par exemple 97 au
moment du plantage.
Si j'arrête la boucle si > 96 pas de plantage
L'effacement des url marche parfaitement
J'en recree en navigat avec InternetExplorer : j'en compte alors 66 au
moment du plantage.
Si j'arrête la boucle si > 65 pas de plantage

La commande SI PAS AppelDLL32("wininet","FindNextUrlCacheEntryA",
hFile, &ICEI, &dwBuffer) .. ne produit pas de code retour ce qui ne
permet pas de détecter la fin de lecture

Mon problème est de savoir comment reconnaitre le dernier url pour
stopper la boucle ?

Cordialement




/// CODE RECUPERE ///

LMEM_FIXED est un entier = 0
NORMAL_CACHE_ENTRY est un entier = 1

FILETIME est une structure
dwLowDateTime est un entier
dwHighDateTime est un entier
FIN

INTERNET_CACHE_ENTRY_INFO est une structure
dwStructSize est un entier
lpszSourceUrlName est un entier
lpszLocalFileName est un entier
CacheEntryType est un entier
dwUseCount est un entier
dwHitRate est un entier
dwSizeLow est un entier
dwSizeHigh est un entier
LastModifiedTime est un FILETIME
ExpireTime est un FILETIME
LastAccessTime est un FILETIME
LastSyncTime est un FILETIME
lpHeaderInfo est un entier
dwHeaderInfoSize est un entier
lpszFileExtension est un entier
dwExemptDelta est un entier
szRestOfData est un tableau fixe de 1024 entier
FIN

ICEI est un INTERNET_CACHE_ENTRY_INFO
hFile est un entier
cachefile est une chaîne ASCIIZ sur 260 // MAX_PATH
dwBuffer est un entier sans signe sur 4 octets
pntrICE est un entier

ListeSupprimeTout(Liste1)

ChargeDLL("wininet.dll")

ICEI:dwStructSize = 80
dwBuffer = 2048
hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", Null, &ICEI,
&dwBuffer)
SI hFile <= 0 ALORS RETOUR

BOUCLE

SI ETBinaire(ICEI:CacheEntryType,NORMAL_CACHE_ENTRY) =
NORMAL_CACHE_ENTRY ALORS
AppelDLL32("kernel32","lstrcpyA", &cachefile,
ICEI:lpszSourceUrlName)
ListeAjoute(Liste1, "! "+ cachefile)
FIN

//SI Efface ALORS
// IF
AppelDLL32("wininet","DeleteUrlCacheEntry",ICEI:lpszSourceUrlName) <> 0
ALORS
// ListeModifie(Liste,"- "+cachefile,ListeOccurrence(Liste))
//FIN
//FIN


dwBuffer = 2048
SI PAS AppelDLL32("wininet","FindNextUrlCacheEntryA", hFile, &ICEI,
&dwBuffer) ALORS SORTIR

SI ErreurInfo(errCodeSystème) = 259 ALORS SORTIR // NO_MORE_ITEM

FIN

AppelDLL32("wininet","FindCloseUrlCache", hFile)

--
Elle est pas belle la vie ?
Avatar
Georges PEYRE
Bonjour,,

NOTA : Pour tester le code c'est simple

Créer une fenêtre vide
Ajouter une liste Liste1
Ajouter un bouton
Copier le code Windev du message précédent dans clic du bouton (
laisser efface en commentaire pour ne pas effacer le contenu du fichier
)


J'ai testé ce code sur Windev 7.5 : le plantage existe également dans
ce code

SI ETBinaire(ICEI:CacheEntryType,NORMAL_CACHE_ENTRY) NORMAL_CACHE_ENTRY ALORS
AppelDLL32("kernel32","lstrcpyA", &cachefile,
ICEI:lpszSourceUrlName)
*** Le plantage se situe à l'exécution de cet appel.
*** Le test d'une erreur à la suite de cet appel est inopérant car déjà
planté
ListeAjoute(Liste1, "! "+ cachefile)
FIN

Est-ce que ce code est fait pour tourner sur W98SE ?
Il marche très bien si je limite le nombre de boucles comme je l'ai
déjà dit.

J'ai retrouvé le code VB que je crois être à l'origine de ce code :

Merci de m'aider car c'est vraiment dommage de ne pouvoir utiliser ce
code

Cordialement

////////// CODE VB ///////////////////

Attribute VB_Name = "UrlCache"
'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

--
Elle est pas belle la vie ?
Avatar
Romain PETIT
Georges PEYRE vient de nous annoncer :
Bonjour,,



J'ai testé ce code sur Windev 7.5 : le plantage existe également dans ce code



Il y a de fortes chances qu'une URL présente dans ton cache dépasse la
valeur maxi que tu as défini...

Essaye simplement de remplacer la valeur max de cachefile :
cachefile est une chaîne ASCIIZ sur 4096

La doc sur le MSDN précise qu'il n'y a pas de valeur limite concernant
la taille de la chaine...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/internet_cache_entry_info.asp

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Georges PEYRE
Bonjour Romain,

Super c'était tout à fait celà : ça marche parfaitement

Je suis d'ailleurs stupéfait du nombre d'url présentes dans ce fichier
Je pensais qu'elles étaient toutes effacées lorsqu'on les supprime avec
l'option de Internet Explorer
Certaines remontent à plusieurs années
Quels risques y-t-il à les effacer de cette façon avec ma/ta procédure
?
Est-ce que cette supression a une influence sur les noms d'url
physiques qu'on voit dans le répertoire Internet de Windows ?

Merci encore

Cordialement



Romain PETIT a écrit :
Georges PEYRE vient de nous annoncer :
Bonjour,,



J'ai testé ce code sur Windev 7.5 : le plantage existe également dans ce
code



Il y a de fortes chances qu'une URL présente dans ton cache dépasse la valeur
maxi que tu as défini...

Essaye simplement de remplacer la valeur max de cachefile :
cachefile est une chaîne ASCIIZ sur 4096

La doc sur le MSDN précise qu'il n'y a pas de valeur limite concernant la
taille de la chaine...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/internet_cache_entry_info.asp

A+



--
Elle est pas belle la vie ?