Newsgroup: it.comp.lang.visual-basic
Titolo: vb2008 - cache di ie

c'è un modo per svuotare la cache di ie?
grazie 

 grazie
Prova ad inclinare di lato il monitor.....
(...non ho resistito chiedo venia! ghghgh)


wrote:

tiè vai........mi faccio perdonare....
http://en.csharp-online.net/Clear_Internet_Explorer_cache
http://www.dotnetspider.com/resources/22152-How-clear-IE-cache-through-vb-net.aspx

 tič vai........mi faccio perdonare....
http://en.csharp-online.net/Clear_Internet_Explorer_cache
http://www.dotnetspider.com/resources/22152-How-clear-IE-cache-through-vb-net.aspx
non č che non ci avessi provato, direi proprio a partire dal secondo link
Imports System
Imports System.IO
Imports System.Net
Imports System.Diagnostics
...
    Private Sub cmdCache_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles cmdCache.Click
        ClearCacheNow()
    End Sub
    Private Sub ClearCacheNow()
        If ClearCache() = True Then
            txtLog.Text = "Cache Cleared"
        Else
            txtLog.Text = "Cache NOT Cleared"
        End If
    End Sub
    Private Sub EmptyCacheFolder(ByVal folder As DirectoryInfo)
        For Each file As FileInfo In folder.GetFiles()
            file.Delete()
        Next
        'For Each subfolder As DirectoryInfo In folder.GetDirectories()
        '    EmptyCacheFolder(subfolder)
        'Next
    End Sub
    Private Function ClearCache() As Boolean
        Dim Empty As Boolean
        Try
            EmptyCacheFolder(New 
DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache)))
            Empty = True
        Catch
            Empty = False
        End Try
        Return Empty
    End Function
il problema č solo che nel log mi ritrovo "cache cleared", e se tolgo il 
commento alle tre righe, "cache NOT cleared", ma in ogni modo, se nel 
frattempo ho una finestra di explorer sulla cache e dopo averla pulita 
faccio f5, i file sono assolutamente ancora tutti. se faccio f5 dopo averla 
pulita da ie, i file sono scomparsi.
cosa sto sbagliando?
ciao 

 ciao
NULLA .....però la soluzione è ASSURDA!
Non ho mai avuto questa esigenza...e quindi (errore mio) ti ho dato un
codice trovato su internet!
quindi stanotte ho avviato 
vb.net
 express 2008..e buttato giù questo
codice trovato nel forum di msdn
Imports System.IO
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
        Dim stCanc As New DirectoryInfo
(System.Environment.GetFolderPath
(Environment.SpecialFolder.InternetCache))
        CancellaCartella(stCanc)
        RIPULISCI()
    End Sub
    Sub CancellaCartella(ByVal NomeCartella As DirectoryInfo)
        For Each tFile As FileInfo In NomeCartella.GetFiles
            tFile.Delete()
        Next
        For Each Sottocartella As DirectoryInfo In
NomeCartella.GetDirectories
            CancellaCartella(Sottocartella)
        Next
    End Sub
End Class
ed è vero....non ripulisce nulla!...anzi mi dà errore perchè un altro
processo blocca il file...(la cache di IE...in effetti è un unico
file)...e non c'è verso sbloccarlo!
ed allora.....
allora vedi che c'è una chiamata alla sub RIPULISCI?
quella funziona...SDRADICA di brutto tutto quello che esiste nella
cache....
MA IL FARLO un incubo.....trovi come farlo qui.....dentro un vecchio
"support" di microsoft
http://support.microsoft.com/kb/311289/it
devi farti una classe ed un modulo...ed agganciarti direttamente a
wininet.dll....replichi da codice la cancellazione manuale....e
sdradica davvero tutta la cache....ma proprio tutta!!!
Per chi interessa
una classe
dentro
Imports System.Runtime.InteropServices
'Class for deleting the cache.
Public Class Class1
    'For PInvoke: Contains information about an entry in the Internet
cache
    <StructLayout(LayoutKind.Explicit, Size:=80)> _
    Public Structure INTERNET_CACHE_ENTRY_INFOA
        <FieldOffset(0)> Public dwStructSize As UInt32
        <FieldOffset(4)> Public lpszSourceUrlName As IntPtr
        <FieldOffset(8)> Public lpszLocalFileName As IntPtr
        <FieldOffset(12)> Public CacheEntryType As UInt32
        <FieldOffset(16)> Public dwUseCount As UInt32
        <FieldOffset(20)> Public dwHitRate As UInt32
        <FieldOffset(24)> Public dwSizeLow As UInt32
        <FieldOffset(28)> Public dwSizeHigh As UInt32
        <FieldOffset(32)> Public LastModifiedTime As FILETIME
        <FieldOffset(40)> Public ExpireTime As FILETIME
        <FieldOffset(48)> Public LastAccessTime As FILETIME
        <FieldOffset(56)> Public LastSyncTime As FILETIME
        <FieldOffset(64)> Public lpHeaderInfo As IntPtr
        <FieldOffset(68)> Public dwHeaderInfoSize As UInt32
        <FieldOffset(72)> Public lpszFileExtension As IntPtr
        <FieldOffset(76)> Public dwReserved As UInt32
        <FieldOffset(76)> Public dwExemptDelta As UInt32
    End Structure
    'For PInvoke: Initiates the enumeration of the cache groups in the
Internet cache
    <DllImport("wininet.dll", SetLastError:=True, _
       CharSet:=CharSet.Auto, _
       EntryPoint:="FindFirstUrlCacheGroup", _
       CallingConvention:=CallingConvention.StdCall)> _
    Shared Function FindFirstUrlCacheGroup( _
        ByVal dwFlags As Int32, _
        ByVal dwFilter As Integer, _
        ByVal lpSearchCondition As IntPtr, _
        ByVal dwSearchCondition As Int32, _
        ByRef lpGroupId As Long, _
        ByVal lpReserved As IntPtr) As IntPtr
    End Function
    'For PInvoke: Retrieves the next cache group in a cache group
enumeration
    <DllImport("wininet.dll", _
       SetLastError:=True, _
       CharSet:=CharSet.Auto, _
       EntryPoint:="FindNextUrlCacheGroup", _
       CallingConvention:=CallingConvention.StdCall)> _
    Shared Function FindNextUrlCacheGroup( _
        ByVal hFind As IntPtr, _
        ByRef lpGroupId As Long, _
        ByVal lpReserved As IntPtr) As Boolean
    End Function
    'For PInvoke: Releases the specified GROUPID and any associated
state in the cache index file
    <DllImport("wininet.dll", _
       SetLastError:=True, _
       CharSet:=CharSet.Auto, _
       EntryPoint:="DeleteUrlCacheGroup", _
       CallingConvention:=CallingConvention.StdCall)> _
    Shared Function DeleteUrlCacheGroup( _
        ByVal GroupId As Long, _
        ByVal dwFlags As Int32, _
        ByVal lpReserved As IntPtr) As Boolean
    End Function
    'For PInvoke: Begins the enumeration of the Internet cache
    <DllImport("wininet.dll", _
        SetLastError:=True, _
        CharSet:=CharSet.Auto, _
        EntryPoint:="FindFirstUrlCacheEntryA", _
        CallingConvention:=CallingConvention.StdCall)> _
     Shared Function FindFirstUrlCacheEntry( _
     <MarshalAs(UnmanagedType.LPStr)> ByVal lpszUrlSearchPattern As
String, _
          ByVal lpFirstCacheEntryInfo As IntPtr, _
          ByRef lpdwFirstCacheEntryInfoBufferSize As Int32) As IntPtr
    End Function
    'For PInvoke: Retrieves the next entry in the Internet cache
    <DllImport("wininet.dll", _
       SetLastError:=True, _
       CharSet:=CharSet.Auto, _
       EntryPoint:="FindNextUrlCacheEntryA", _
       CallingConvention:=CallingConvention.StdCall)> _
    Shared Function FindNextUrlCacheEntry( _
          ByVal hFind As IntPtr, _
          ByVal lpNextCacheEntryInfo As IntPtr, _
          ByRef lpdwNextCacheEntryInfoBufferSize As Integer) As
Boolean
    End Function
    'For PInvoke: Removes the file that is associated with the source
name from the cache, if the file exists
    <DllImport("wininet.dll", _
      SetLastError:=True, _
      CharSet:=CharSet.Auto, _
      EntryPoint:="DeleteUrlCacheEntryA", _
      CallingConvention:=CallingConvention.StdCall)> _
    Shared Function DeleteUrlCacheEntry( _
        ByVal lpszUrlName As IntPtr) As Boolean
    End Function
End Class
un modulo
dentro
Imports System.Runtime.InteropServices
Module Module1
    Sub RIPULISCI()
        'Indicates that all of the cache groups in the user's system
should be enumerated
        Const CACHEGROUP_SEARCH_ALL = &H0
        'Indicates that all of the cache entries that are associated
with the cache group should be deleted,
        'unless the entry belongs to another cache group.
        Const CACHEGROUP_FLAG_FLUSHURL_ONDELETE = &H2
        'File not found.
        Const ERROR_FILE_NOT_FOUND = &H2
        'No more items have been found.
        Const ERROR_NO_MORE_ITEMS = 259
        'Pointer to a GROUPID variable
        Dim groupId As Long = 0
        'Local variables
        Dim cacheEntryInfoBufferSizeInitial As Integer = 0
        Dim cacheEntryInfoBufferSize As Integer = 0
        Dim cacheEntryInfoBuffer As IntPtr = IntPtr.Zero
        Dim internetCacheEntry As Class1.INTERNET_CACHE_ENTRY_INFOA
        Dim enumHandle As IntPtr = IntPtr.Zero
        Dim returnValue As Boolean = False
        'Delete the groups first.
        'Groups may not always exist on the system.
        'For more information, visit the following Microsoft Web
site:
        '
http://msdn.microsoft.com/library/?url=/workshop/networking/
wininet/overview/cache.asp
        'By default, a URL does not belong to any group. Therefore,
that cache may become
        'empty even when CacheGroup APIs are not used because the
existing URL does not belong to any group.
        enumHandle = Class1.FindFirstUrlCacheGroup(0,
CACHEGROUP_SEARCH_ALL, IntPtr.Zero, 0, groupId, IntPtr.Zero)
        'If there are no items in the Cache, you are finished.
        If (Not enumHandle.Equals(IntPtr.Zero) And
ERROR_NO_MORE_ITEMS.Equals(Marshal.GetLastWin32Error)) Then
            Exit Sub
        End If
        'Loop through Cache Group, and then delete entries.
        While (True)
            'Delete a particular Cache Group.
            returnValue = Class1.DeleteUrlCacheGroup(groupId,
CACHEGROUP_FLAG_FLUSHURL_ONDELETE, IntPtr.Zero)
            If (Not returnValue And ERROR_FILE_NOT_FOUND.Equals
(Marshal.GetLastWin32Error())) Then
                returnValue = Class1.FindNextUrlCacheGroup(enumHandle,
groupId, IntPtr.Zero)
            End If
            If (Not returnValue And (ERROR_NO_MORE_ITEMS.Equals
(Marshal.GetLastWin32Error()) Or ERROR_FILE_NOT_FOUND.Equals
(Marshal.GetLastWin32Error()))) Then
                Exit While
            End If
        End While
        'Start to delete URLs that do not belong to any group.
        enumHandle = Class1.FindFirstUrlCacheEntry(vbNull,
IntPtr.Zero, cacheEntryInfoBufferSizeInitial)
        If (Not enumHandle.Equals(IntPtr.Zero) And
ERROR_NO_MORE_ITEMS.Equals(Marshal.GetLastWin32Error())) Then
            Exit Sub
        End If
        cacheEntryInfoBufferSize = cacheEntryInfoBufferSizeInitial
        cacheEntryInfoBuffer = Marshal.AllocHGlobal
(cacheEntryInfoBufferSize)
        enumHandle = Class1.FindFirstUrlCacheEntry(vbNull,
cacheEntryInfoBuffer, cacheEntryInfoBufferSizeInitial)
        While (True)
            internetCacheEntry = CType(Marshal.PtrToStructure
(cacheEntryInfoBuffer, GetType(Class1.INTERNET_CACHE_ENTRY_INFOA)),
Class1.INTERNET_CACHE_ENTRY_INFOA)
            cacheEntryInfoBufferSizeInitial = cacheEntryInfoBufferSize
            returnValue = Class1.DeleteUrlCacheEntry
(internetCacheEntry.lpszSourceUrlName)
            If (Not returnValue) Then
                'Console.WriteLine("Error Deleting: {0}",
Marshal.GetLastWin32Error())
            End If
            returnValue = Class1.FindNextUrlCacheEntry(enumHandle,
cacheEntryInfoBuffer, cacheEntryInfoBufferSizeInitial)
            If (Not returnValue And ERROR_NO_MORE_ITEMS.Equals
(Marshal.GetLastWin32Error())) Then
                Exit While
            End If
            If (Not returnValue And cacheEntryInfoBufferSizeInitial >
cacheEntryInfoBufferSize) Then
                cacheEntryInfoBufferSize =
cacheEntryInfoBufferSizeInitial
                Dim tempIntPtr As New IntPtr(cacheEntryInfoBufferSize)
                cacheEntryInfoBuffer = Marshal.ReAllocHGlobal
(cacheEntryInfoBuffer, tempIntPtr)
                returnValue = Class1.FindNextUrlCacheEntry(enumHandle,
cacheEntryInfoBuffer, cacheEntryInfoBufferSizeInitial)
            End If
        End While
        Marshal.FreeHGlobal(cacheEntryInfoBuffer)
    End Sub
End Module
tutte le volte che invocate RIPULISCI()....parte il tritacarne...e
sparisce la cache!
vi dirà (WARNING...quindi ignorabile in compilazione) che la struttura
FILETIME è obsoleta....io capisco un 20%/30% di questo codice...lascio
ad uno più esperto di me sistemare formalmente la
dichiarazione....così funziona!
Notte notte!

io capisco un 20%/30% di questo codice
uomo fortunato... io forse quello 0.20 - 0.30%  :)
grazie, provo a ragionarci un po' su
ciao


Inutile dirlo a te....ma altri meno esperti potrebbero leggere il
post...
Logicamente.....ho lasciato il vecchio codice.....del forum per
testare che non va davvero!
In realtà per tritare la cache di IE bastano il modulo e la classe di
sopra
....e la chiamata RIPULISCI quando desiderate RASARE A ZERO la cache!

obsoleta
dice anche come rimediare, usando
System.Runtime.InteropServices.ComTypes.FILETIME
invece nelle dichiarazioni del modulo non gli piace proprio la forma 
classica
Const CACHEGROUP_SEARCH_ALL = &H0
con strict=on dà errore secco di
conversione implicita dal tipo msvb...varianttype a string
disattivando strict va, ma preferirei tenerlo per imparare io.
quindi ho rimesso strict e ho cambiato in
Const CACHEGROUP_SEARCH_ALL as long = &H0
dopodiché non gli piaceva vbnull in
clsCache.FindFirstUrlCacheEntry(vbNull, cacheEntryInfoBuffer, 
cacheEntryInfoBufferSizeInitial)
invece sembra andare
clsCache.FindFirstUrlCacheEntry(CLng(vbNull).ToString, cacheEntryInfoBuffer, 
cacheEntryInfoBufferSizeInitial)
non dà più errori e avvertimenti, e la cache continua a pulirla.
se trovo altri casini ti dico.
ciao 

ps - mentre cercavo sulla conversione di varianttype sono capitato qui
http://www.scribd.com/doc/6391444/Microsoft-Visual-Basic-2008-Step-By-Step-
che sarebbe il manuale di halvorson, ms press.
no salva con nome, solo visione e stampa.
ma se stampi su pdfcreator... :)
con vb4 halvorson mi servì parecchio, era molto chiaro.
non so questo.
ciao 

 no salva con nome, solo visione e stampa.
C'è il tastino download :-P, anche se bisogna iscriversi,
peraltro gratuitamente.
Bye, G.

 peraltro gratuitamente.
mi sono iscritto :P
quando clicchi download, scegli il formato, e il pdf viene _visualizzato nel 
browser_ senza barra strumenti, nella cache di ie non c'è e non avevo voglia 
di cercarlo. d'altronde quando ti iscrivi direi parli di read/search/print, 
non save.
iscriviti anche tu con un indirizzo a perdere e prova, manuali direi ce ne 
siano.
ora scusami, torno a halvorson.pdf :P 

 browser_ senza barra strumenti
Nelle preferenze del reader, categoria documenti, disattiva la voce
"Consenti ai documenti di nascondere le barre..." :-).
Io per buona misura ho disattivato anche gli script, vedi mai.
Bye, G.

 Io per buona misura ho disattivato anche gli script, vedi mai.
se mai faccio un sito dove ci si iscrive
NON ISCRIVERTI :P

"Wodka40[Google]"
In realtà per tritare la cache di IE bastano il modulo e la classe di
sopra ....e la chiamata RIPULISCI quando desiderate RASARE A ZERO la cache!
aggiornamento:
vista hp a casa, funziona benissimo.
vista business in ufficio, zero via zero. la cache resta lì.
boh...
ciao 


Problema di permessi???
Cache in altra posizione? Api diversa?
Io ho provato su XP prof
ho Vista Ultimate su un altro pc ...ma resisto alla voglia di
installarci VStudio...
Cmq tra home e business che cambia?
Per me per funzionare devi essere administrator con permessi full
trust...mi sà che il vista business ti fà più storie fra CHI sei e CHE
COSA sei abilitato a fare!
...ma mi posso sempre sbagliare!


anche sul business ho tolto all'istante uac defender e compagnia cantante. 
sono sotto 4-5 firewall hw, non voglio sprecare cpu. e sono l'amministratore 
della lan, oltre che dei miei 3 pc...
(btw, all'accensione i due xp con le policies di rete ci mettono circa 2-3 
minuti a darmi il logon, vista 15-20 _secondi_. sono configurati uguale. 
ammetto che il quad + sata conta non poco sui p4 + pata, comunque sta 
lentezza di vista, boh... semmai è qui a casa che ci mette un po' nonostante 
dual + sata, ma ci sono una caterva di ciappi usb attaccati, anzi un disco 
usb impedisce proprio il boot al bios, devo staccarlo e riattaccarlo quando 
si avvia vista)
alla cartella ci ho pensato, ma
Environment.SpecialFolder.InternetCache
dovrebbe darla giusta qualunque sia, no?
sia qui a casa che lì ho ie7
quanto a vs, dipende.
vb6 con aero è un incubo (anche a office2000 e ps7 aero piace poco), per il 
resto con basic (eheheh, ecco spiegato il nome) ok.
vs2008 sembra nato per vista... strano :)
ciao 

 "Wodka40[Google]"> In realtà per tritare la cache di IE bastano il modulo e la classe di
Vista Ultimate
Office 2007
"vecchio" P4 3ghz 3GbRam Radeon X1300
1 SATA con winVista
2 PATA (uno su slitta)
A me va veloce....sarà che ancora non l'ho riempito di schifezze
varie...e che come antivirus uso lo "scomodo" clamWin....
Aero è attivato...a me non dà noia....ma lo uso raramente...son ancora
abituato a cambiare finesra riducendola!!!