How To Clear Cache When Your Application Hosts a WebBrowser Control (262110)



The information in this article applies to:

  • Microsoft Internet Explorer (Programming) 5
  • Microsoft Internet Explorer (Programming) 5.01
  • Microsoft Internet Explorer (Programming) 5.5

This article was previously published under Q262110

SUMMARY

When your application hosts a WebBrowser control, there may be a need to clear the cache programmatically. This feature is not available through the interfaces of the WebBrowser control. This article explains how to use WinInet API functions to clear the cache directly.

MORE INFORMATION

Use WinInet API FindFirstURLCacheEntry to find the first cache entry and use FindNextUrlCacheEntry to enumerate through the cache. Use DeleteUrlCacheEntry to delete each entry.

Note that FindFirstUrlCacheGroup, FindNextUrlCacheGroup, and DeleteUrlCacheGroup are used in the following example. These API functions have only became available with Internet Explorer 5, so proper checking as shown is needed to prevent errors.

The following steps show you how to use the WinInet API in Visual Basic to clear all the files in the cache.

  1. Create a new Visual Basic standard EXE project.
  2. Create a command button under form1.
  3. Paste the following code in the module of form1:
    Option Explicit
    
    Private Declare Function FindFirstUrlCacheGroup Lib "wininet.dll" ( _
        ByVal dwFlags As Long, _
        ByVal dwFilter As Long, _
        ByRef lpSearchCondition As Long, _
        ByVal dwSearchCondition As Long, _
        ByRef lpGroupId As Date, _
        ByRef lpReserved As Long) As Long
    
    Private Declare Function FindNextUrlCacheGroup Lib "wininet.dll" ( _
        ByVal hFind As Long, _
        ByRef lpGroupId As Date, _
        ByRef lpReserved As Long) As Long
        
    Private Declare Function DeleteUrlCacheGroup Lib "wininet.dll" ( _
        ByVal sGroupID As Date, _
        ByVal dwFlags As Long, _
        ByRef lpReserved As Long) As Long
        
    Private Declare Function FindFirstUrlCacheEntry Lib "wininet.dll" Alias "FindFirstUrlCacheEntryA" ( _
        ByVal lpszUrlSearchPattern As String, _
        ByRef lpFirstCacheEntryInfo As INTERNET_CACHE_ENTRY_INFO, _
        ByRef lpdwFirstCacheEntryInfoBufferSize As Long) As Long
        
    Private Type INTERNET_CACHE_ENTRY_INFO
        dwStructSize As Long
        szRestOfData(1024) As Long
    End Type
    
    Private Declare Function DeleteUrlCacheEntry Lib "wininet.dll" Alias "DeleteUrlCacheEntryA" ( _
        ByVal lpszUrlName As Long) As Long
    
    Private Declare Function FindNextUrlCacheEntry Lib "wininet.dll" Alias "FindNextUrlCacheEntryA" ( _
        ByVal hEnumHandle As Long, _
        ByRef lpNextCacheEntryInfo As INTERNET_CACHE_ENTRY_INFO, _
        ByRef lpdwNextCacheEntryInfoBufferSize As Long) As Long
    
    Private Const CACHGROUP_SEARCH_ALL = &H0
    Private Const ERROR_NO_MORE_FILES = 18
    Private Const ERROR_NO_MORE_ITEMS = 259
    Private Const CACHEGROUP_FLAG_FLUSHURL_ONDELETE = &H2
    Private Const BUFFERSIZE = 2048
    
    Private Sub Command1_Click()
        Dim sGroupID As Date
        Dim hGroup As Long
        Dim hFile As Long
        Dim sEntryInfo As INTERNET_CACHE_ENTRY_INFO
        Dim iSize As Long
            
        On Error Resume Next
        
        ' Delete the groups
        hGroup = FindFirstUrlCacheGroup(0, 0, 0, 0, sGroupID, 0)
        
        ' To avoid error using it with IE4 as FindFirstUrlCacheGroup is not implemented
        If Err.Number <> 453 Then
            If (hGroup = 0) And (Err.LastDllError <> 2) Then
                MsgBox "An error occurred enumerating the cache groups" & Err.LastDllError
                Exit Sub
            End If
        Else
            Err.Clear
        End If
        
        If (hGroup <> 0) Then
            'we succeeded in finding the first cache group.. enumerate and
            'delete
            Do
                If (0 = DeleteUrlCacheGroup(sGroupID, CACHEGROUP_FLAG_FLUSHURL_ONDELETE, 0)) Then
                   
                   ' To avoid error using it with IE4 as FindFirstUrlCacheGroup is not implemented
                   If Err.Number <> 453 Then
                     MsgBox "Error deleting cache group " & Err.LastDllError
                     Exit Sub
                   Else
                      Err.Clear
                   End If
                End If
                iSize = BUFFERSIZE
                If (0 = FindNextUrlCacheGroup(hGroup, sGroupID, iSize)) And (Err.LastDllError <> 2) Then
                    MsgBox "Error finding next url cache group! - " & Err.LastDllError
                End If
            Loop Until Err.LastDllError = 2
        End If
      
      ' Delete the files
        sEntryInfo.dwStructSize = 80
        iSize = BUFFERSIZE
        hFile = FindFirstUrlCacheEntry(0, sEntryInfo, iSize)
        If (hFile = 0) Then
            If (Err.LastDllError = ERROR_NO_MORE_ITEMS) Then
                GoTo done
            End If
            MsgBox "ERROR: FindFirstUrlCacheEntry - " & Err.LastDllError
            Exit Sub
        End If
        Do
            If (0 = DeleteUrlCacheEntry(sEntryInfo.szRestOfData(0))) _
                And (Err.LastDllError <> 2) Then
                Err.Clear
            End If
            iSize = BUFFERSIZE
            If (0 = FindNextUrlCacheEntry(hFile, sEntryInfo, iSize)) And (Err.LastDllError <> ERROR_NO_MORE_ITEMS) Then
                MsgBox "Error:  Unable to find the next cache entry - " & Err.LastDllError
                Exit Sub
            End If
        Loop Until Err.LastDllError = ERROR_NO_MORE_ITEMS
    done:
        MsgBox "cache cleared"
        Command1.Enabled = True
    End Sub 
    					
  4. Run your project and click Command1. The cache in your computer will be cleared.

REFERENCES

For more information about the syntax of the WinInet caching function, see the following Microsoft MSDN Online Web Workshop site: For more information about developing Web-based solutions for Microsoft Internet Explorer, visit the following Microsoft Web sites:

Modification Type:MajorLast Reviewed:5/11/2006
Keywords:kbCaching kbhowto kbSBNWorkshop kbWebBrowser KB262110