[WD7.5] API pour effacer le dossier "Temporary Internet Files"
12 réponses
Vincent Barré
Bonjour
Qqu connaît-il le moyen "Propre" d'effacer le fichier index.dat des dossiers
"Temporary Internet Files", "History" et autres répertoires de
"surveillance" de Windows.
Car évidement les fonction fSupprime et fSupprimeRep ne marche pas sur ces
répertoire (Fichier bloqué par Windows).
Et le Ré-écriture dans ces fichier n'est pas très propre.
Qqu connaît-il le moyen "Propre" d'effacer le fichier index.dat des dossiers "Temporary Internet Files", "History" et autres répertoires de "surveillance" de Windows.
[...]
Une idée ou les API officiel ??
Essaye de traduire ce code VB : http://www.mvps.org/vbnet/code/fileapi/deleteurlcache.htm
A+
-- Romain PETIT http://cerbermail.com/?IJmancZl88 (cliquez sur le lien ci-dessus pour me contacter en privé)
"Vincent Barré" a formulé la demande :
Bonjour
Bonsoir,
Qqu connaît-il le moyen "Propre" d'effacer le fichier index.dat des dossiers
"Temporary Internet Files", "History" et autres répertoires de
"surveillance" de Windows.
[...]
Une idée ou les API officiel ??
Essaye de traduire ce code VB :
http://www.mvps.org/vbnet/code/fileapi/deleteurlcache.htm
A+
--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Qqu connaît-il le moyen "Propre" d'effacer le fichier index.dat des dossiers "Temporary Internet Files", "History" et autres répertoires de "surveillance" de Windows.
[...]
Une idée ou les API officiel ??
Essaye de traduire ce code VB : http://www.mvps.org/vbnet/code/fileapi/deleteurlcache.htm
A+
-- Romain PETIT http://cerbermail.com/?IJmancZl88 (cliquez sur le lien ci-dessus pour me contacter en privé)
Vincent Barré
"Romain PETIT" a écrit :
Bonsoir,
> Qqu connaît-il le moyen "Propre" d'effacer le fichier index.dat des
dossiers
> "Temporary Internet Files", "History" et autres répertoires de > "surveillance" de Windows. [...] > Une idée ou les API officiel ??
Essaye de traduire ce code VB : http://www.mvps.org/vbnet/code/fileapi/deleteurlcache.htm
Merci pour ta réponse, j'ai traduit le code en Delphi et en Windev (je n'ai pas VB), en Delphi Tout est OK par contre en Windev ça bloque au niveau du FindNext. Je ne récupére que la première adresse. Je joint le code si qqu peut regarder ou je me suis planté, sûrement dans le adresses..
PROCEDURE GetCacheURLList()
ICEI est un INTERNET_CACHE_ENTRY_INFO hFile est un entier cachefile est une chaîne posUrl est un entier posEnd est un entier dwBuffer est un entier sans signe sur 4 octets pntrICE est un entier vbNullString est une chaîne = Caract(0) Zero est un entier = 0
ListeSupprimeTout(Liste)
// Récupére la taille du buffer pour allocation dwBuffer = 0 hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", &vbNullString, 0, &dwBuffer)
// Alloc memoire + FindFirst pntrICE = AppelDLL32("kernel32","LocalAlloc", LMEM_FIXED, dwBuffer ) SI pntrICE <= 0 ALORS RETOUR hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", &vbNullString, pntrICE, &dwBuffer) SI hFile <= 0 ALORS RETOUR AppelDLL32("kernel32","RtlMoveMemory", pntrICE, &dwBuffer, 4)
BOUCLE
// Rempli la structure avec le buffer lut AppelDLL32("kernel32","RtlMoveMemory", &ICEI, pntrICE, Dimension(ICEI) )
//CacheEntryType is a long representing //the type of entry returned SI ETBinaire(ICEI:CacheEntryType,NORMAL_CACHE_ENTRY) NORMAL_CACHE_ENTRY ALORS
//extract the string from the memory location //pointed to by the lpszSourceUrlName member //and add to a list AppelDLL32("kernel32","lstrcpyA", &cachefile, ICEI:lpszSourceUrlName)
ListeAjoute(Liste, cachefile) FIN // SI
// Récupére la taille du buffer pour allocation suivante dwBuffer = 0 AppelDLL32("kernel32","RtlZeroMemory", pntrICE, dwBuffer) AppelDLL32("wininet","FindNextUrlCacheEntryA", hFile, pntrICE, &dwBuffer)
// Libére la mémoire AppelDLL32("kernel32","LocalFree", pntrICE)
// Alloc memoire + FindNext pntrICE = AppelDLL32("kernel32","LocalAlloc", LMEM_FIXED, dwBuffer ) SI pntrICE <= 0 ALORS SORTIR
SI PAS AppelDLL32("wininet","FindNextUrlCacheEntryA", hFile, pntrICE, &dwBuffer) ALORS SORTIR
> Qqu connaît-il le moyen "Propre" d'effacer le fichier index.dat des
dossiers
> "Temporary Internet Files", "History" et autres répertoires de
> "surveillance" de Windows.
[...]
> Une idée ou les API officiel ??
Essaye de traduire ce code VB :
http://www.mvps.org/vbnet/code/fileapi/deleteurlcache.htm
Merci pour ta réponse,
j'ai traduit le code en Delphi et en Windev (je n'ai pas VB), en Delphi Tout
est OK par contre en Windev ça bloque au niveau du FindNext.
Je ne récupére que la première adresse.
Je joint le code si qqu peut regarder ou je me suis planté, sûrement dans le
adresses..
PROCEDURE GetCacheURLList()
ICEI est un INTERNET_CACHE_ENTRY_INFO
hFile est un entier
cachefile est une chaîne
posUrl est un entier
posEnd est un entier
dwBuffer est un entier sans signe sur 4 octets
pntrICE est un entier
vbNullString est une chaîne = Caract(0)
Zero est un entier = 0
ListeSupprimeTout(Liste)
// Récupére la taille du buffer pour allocation
dwBuffer = 0
hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", &vbNullString, 0,
&dwBuffer)
// Alloc memoire + FindFirst
pntrICE = AppelDLL32("kernel32","LocalAlloc", LMEM_FIXED, dwBuffer )
SI pntrICE <= 0 ALORS RETOUR
hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", &vbNullString,
pntrICE, &dwBuffer)
SI hFile <= 0 ALORS RETOUR
AppelDLL32("kernel32","RtlMoveMemory", pntrICE, &dwBuffer, 4)
BOUCLE
// Rempli la structure avec le buffer lut
AppelDLL32("kernel32","RtlMoveMemory", &ICEI, pntrICE, Dimension(ICEI) )
//CacheEntryType is a long representing
//the type of entry returned
SI ETBinaire(ICEI:CacheEntryType,NORMAL_CACHE_ENTRY) NORMAL_CACHE_ENTRY ALORS
//extract the string from the memory location
//pointed to by the lpszSourceUrlName member
//and add to a list
AppelDLL32("kernel32","lstrcpyA", &cachefile, ICEI:lpszSourceUrlName)
ListeAjoute(Liste, cachefile)
FIN // SI
// Récupére la taille du buffer pour allocation suivante
dwBuffer = 0
AppelDLL32("kernel32","RtlZeroMemory", pntrICE, dwBuffer)
AppelDLL32("wininet","FindNextUrlCacheEntryA", hFile, pntrICE,
&dwBuffer)
// Libére la mémoire
AppelDLL32("kernel32","LocalFree", pntrICE)
// Alloc memoire + FindNext
pntrICE = AppelDLL32("kernel32","LocalAlloc", LMEM_FIXED, dwBuffer )
SI pntrICE <= 0 ALORS SORTIR
SI PAS AppelDLL32("wininet","FindNextUrlCacheEntryA", hFile, pntrICE,
&dwBuffer) ALORS SORTIR
> Qqu connaît-il le moyen "Propre" d'effacer le fichier index.dat des
dossiers
> "Temporary Internet Files", "History" et autres répertoires de > "surveillance" de Windows. [...] > Une idée ou les API officiel ??
Essaye de traduire ce code VB : http://www.mvps.org/vbnet/code/fileapi/deleteurlcache.htm
Merci pour ta réponse, j'ai traduit le code en Delphi et en Windev (je n'ai pas VB), en Delphi Tout est OK par contre en Windev ça bloque au niveau du FindNext. Je ne récupére que la première adresse. Je joint le code si qqu peut regarder ou je me suis planté, sûrement dans le adresses..
PROCEDURE GetCacheURLList()
ICEI est un INTERNET_CACHE_ENTRY_INFO hFile est un entier cachefile est une chaîne posUrl est un entier posEnd est un entier dwBuffer est un entier sans signe sur 4 octets pntrICE est un entier vbNullString est une chaîne = Caract(0) Zero est un entier = 0
ListeSupprimeTout(Liste)
// Récupére la taille du buffer pour allocation dwBuffer = 0 hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", &vbNullString, 0, &dwBuffer)
// Alloc memoire + FindFirst pntrICE = AppelDLL32("kernel32","LocalAlloc", LMEM_FIXED, dwBuffer ) SI pntrICE <= 0 ALORS RETOUR hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", &vbNullString, pntrICE, &dwBuffer) SI hFile <= 0 ALORS RETOUR AppelDLL32("kernel32","RtlMoveMemory", pntrICE, &dwBuffer, 4)
BOUCLE
// Rempli la structure avec le buffer lut AppelDLL32("kernel32","RtlMoveMemory", &ICEI, pntrICE, Dimension(ICEI) )
//CacheEntryType is a long representing //the type of entry returned SI ETBinaire(ICEI:CacheEntryType,NORMAL_CACHE_ENTRY) NORMAL_CACHE_ENTRY ALORS
//extract the string from the memory location //pointed to by the lpszSourceUrlName member //and add to a list AppelDLL32("kernel32","lstrcpyA", &cachefile, ICEI:lpszSourceUrlName)
ListeAjoute(Liste, cachefile) FIN // SI
// Récupére la taille du buffer pour allocation suivante dwBuffer = 0 AppelDLL32("kernel32","RtlZeroMemory", pntrICE, dwBuffer) AppelDLL32("wininet","FindNextUrlCacheEntryA", hFile, pntrICE, &dwBuffer)
// Libére la mémoire AppelDLL32("kernel32","LocalFree", pntrICE)
// Alloc memoire + FindNext pntrICE = AppelDLL32("kernel32","LocalAlloc", LMEM_FIXED, dwBuffer ) SI pntrICE <= 0 ALORS SORTIR
SI PAS AppelDLL32("wininet","FindNextUrlCacheEntryA", hFile, pntrICE, &dwBuffer) ALORS SORTIR
Merci pour ta réponse, j'ai traduit le code en Delphi et en Windev (je n'ai pas VB), en Delphi Tout est OK par contre en Windev ça bloque au niveau du FindNext. Je ne récupére que la première adresse. Je joint le code si qqu peut regarder ou je me suis planté, sûrement dans le adresses..
J'ai le même problème. En VB6 cela fonctionne correctement. J'ai modifié des bricoles sur ton code (chaines ASCIIZ) mais j'arrive au même résultat : le premier appel à FindNextUrlCacheEntryA donne un dwBuffer à 0 (et dans le deboggueur, on a "GetLastError() a renvoyé 6 Détail de l'erreur système :Descripteur non valide").
Bizarre...
LMEM_FIXED est un entier = 0 NORMAL_CACHE_ENTRY est un entier = 1
FILETIME est un 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 FIN
ICEI est un INTERNET_CACHE_ENTRY_INFO hFile est un entier cachefile est une chaîne ASCIIZ sur 4096 posUrl est un entier posEnd est un entier dwBuffer est un entier //sans signe sur 4 octets pntrICE est un entier vbNullString est une chaîne ASCIIZ sur 1 = Caract(0)
ListeSupprimeTout(liste)
dwBuffer = 0 hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", 0, 0,&dwBuffer) pntrICE = AppelDLL32("kernel32","LocalAlloc", LMEM_FIXED, dwBuffer ) SI pntrICE <= 0 ALORS RETOUR AppelDLL32("kernel32","RtlMoveMemory", pntrICE, &dwBuffer, 4) hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", &vbNullString, pntrICE, &dwBuffer) SI hFile <= 0 ALORS RETOUR BOUCLE AppelDLL32("kernel32","RtlMoveMemory", &ICEI, pntrICE, Dimension(ICEI) ) SI ETBinaire(ICEI:CacheEntryType, NORMAL_CACHE_ENTRY) = NORMAL_CACHE_ENTRY ALORS AppelDLL32("kernel32","lstrcpyA", &cachefile, ICEI:lpszSourceUrlName) ListeAjoute(liste, cachefile) FIN AppelDLL32("kernel32","LocalFree", pntrICE) dwBuffer = 0
//********************** // probleme ici //********************** AppelDLL32("wininet","FindNextUrlCacheEntryA", hFile, 0, &dwBuffer)
SI dwBuffer>0 ALORS pntrICE = AppelDLL32("kernel32","LocalAlloc", LMEM_FIXED, dwBuffer ) SI pntrICE <= 0 ALORS SORTIR SI PAS AppelDLL32("wininet","FindNextUrlCacheEntryA", &hFile, pntrICE, &dwBuffer) ALORS SORTIR SINON SORTIR FIN FIN
-- Romain PETIT http://cerbermail.com/?IJmancZl88 (cliquez sur le lien ci-dessus pour me contacter en privé)
Le 22/12/2003, "Vincent Barré" a supposé :
Merci pour ta réponse,
j'ai traduit le code en Delphi et en Windev (je n'ai pas VB), en Delphi Tout
est OK par contre en Windev ça bloque au niveau du FindNext.
Je ne récupére que la première adresse.
Je joint le code si qqu peut regarder ou je me suis planté, sûrement dans le
adresses..
J'ai le même problème.
En VB6 cela fonctionne correctement.
J'ai modifié des bricoles sur ton code (chaines ASCIIZ) mais j'arrive au même
résultat : le premier appel à FindNextUrlCacheEntryA donne un dwBuffer à 0
(et dans le deboggueur, on a "GetLastError() a renvoyé 6
Détail de l'erreur système :Descripteur non valide").
Bizarre...
LMEM_FIXED est un entier = 0
NORMAL_CACHE_ENTRY est un entier = 1
FILETIME est un 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
FIN
ICEI est un INTERNET_CACHE_ENTRY_INFO
hFile est un entier
cachefile est une chaîne ASCIIZ sur 4096
posUrl est un entier
posEnd est un entier
dwBuffer est un entier //sans signe sur 4 octets
pntrICE est un entier
vbNullString est une chaîne ASCIIZ sur 1 = Caract(0)
ListeSupprimeTout(liste)
dwBuffer = 0
hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", 0, 0,&dwBuffer)
pntrICE = AppelDLL32("kernel32","LocalAlloc", LMEM_FIXED, dwBuffer )
SI pntrICE <= 0 ALORS RETOUR
AppelDLL32("kernel32","RtlMoveMemory", pntrICE, &dwBuffer, 4)
hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", &vbNullString, pntrICE, &dwBuffer)
SI hFile <= 0 ALORS RETOUR
BOUCLE
AppelDLL32("kernel32","RtlMoveMemory", &ICEI, pntrICE, Dimension(ICEI) )
SI ETBinaire(ICEI:CacheEntryType, NORMAL_CACHE_ENTRY) = NORMAL_CACHE_ENTRY ALORS
AppelDLL32("kernel32","lstrcpyA", &cachefile, ICEI:lpszSourceUrlName)
ListeAjoute(liste, cachefile)
FIN
AppelDLL32("kernel32","LocalFree", pntrICE)
dwBuffer = 0
//**********************
// probleme ici
//**********************
AppelDLL32("wininet","FindNextUrlCacheEntryA", hFile, 0, &dwBuffer)
SI dwBuffer>0 ALORS
pntrICE = AppelDLL32("kernel32","LocalAlloc", LMEM_FIXED, dwBuffer )
SI pntrICE <= 0 ALORS SORTIR
SI PAS AppelDLL32("wininet","FindNextUrlCacheEntryA", &hFile, pntrICE, &dwBuffer) ALORS SORTIR
SINON
SORTIR
FIN
FIN
Merci pour ta réponse, j'ai traduit le code en Delphi et en Windev (je n'ai pas VB), en Delphi Tout est OK par contre en Windev ça bloque au niveau du FindNext. Je ne récupére que la première adresse. Je joint le code si qqu peut regarder ou je me suis planté, sûrement dans le adresses..
J'ai le même problème. En VB6 cela fonctionne correctement. J'ai modifié des bricoles sur ton code (chaines ASCIIZ) mais j'arrive au même résultat : le premier appel à FindNextUrlCacheEntryA donne un dwBuffer à 0 (et dans le deboggueur, on a "GetLastError() a renvoyé 6 Détail de l'erreur système :Descripteur non valide").
Bizarre...
LMEM_FIXED est un entier = 0 NORMAL_CACHE_ENTRY est un entier = 1
FILETIME est un 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 FIN
ICEI est un INTERNET_CACHE_ENTRY_INFO hFile est un entier cachefile est une chaîne ASCIIZ sur 4096 posUrl est un entier posEnd est un entier dwBuffer est un entier //sans signe sur 4 octets pntrICE est un entier vbNullString est une chaîne ASCIIZ sur 1 = Caract(0)
ListeSupprimeTout(liste)
dwBuffer = 0 hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", 0, 0,&dwBuffer) pntrICE = AppelDLL32("kernel32","LocalAlloc", LMEM_FIXED, dwBuffer ) SI pntrICE <= 0 ALORS RETOUR AppelDLL32("kernel32","RtlMoveMemory", pntrICE, &dwBuffer, 4) hFile = AppelDLL32("wininet","FindFirstUrlCacheEntryA", &vbNullString, pntrICE, &dwBuffer) SI hFile <= 0 ALORS RETOUR BOUCLE AppelDLL32("kernel32","RtlMoveMemory", &ICEI, pntrICE, Dimension(ICEI) ) SI ETBinaire(ICEI:CacheEntryType, NORMAL_CACHE_ENTRY) = NORMAL_CACHE_ENTRY ALORS AppelDLL32("kernel32","lstrcpyA", &cachefile, ICEI:lpszSourceUrlName) ListeAjoute(liste, cachefile) FIN AppelDLL32("kernel32","LocalFree", pntrICE) dwBuffer = 0
//********************** // probleme ici //********************** AppelDLL32("wininet","FindNextUrlCacheEntryA", hFile, 0, &dwBuffer)
SI dwBuffer>0 ALORS pntrICE = AppelDLL32("kernel32","LocalAlloc", LMEM_FIXED, dwBuffer ) SI pntrICE <= 0 ALORS SORTIR SI PAS AppelDLL32("wininet","FindNextUrlCacheEntryA", &hFile, pntrICE, &dwBuffer) ALORS SORTIR SINON SORTIR FIN FIN