心得/经验/绝招
Access API集中营--清除IE缓存
2009-09-17 08:44:12

Option Compare DatabaseOption ExplicitPrivate Const ERROR_CACHE_FIND_FAIL As Long = 0Private Const ERROR_CACHE_FIND_SUCCESS As Long = 1Private Const ERROR_FILE_NOT_FOUND As Long = 2Private Const ERROR_access_DENIED As Long = 5Private Const ERROR_INSUFFICIENT_BUFFER As Long = 122Private Const MAX_PATH As Long = 260Private Const MAX_CACHE_ENTRY_INFO_SIZE As Long = 4096Private Const LMEM_FIXED As Long = &H0Private Const LMEM_ZEROINIT As Long = &H40Private Const LPTR As Long = (LMEM_FIXED Or LMEM_ZEROINIT)Private Const NORMAL_CACHE_ENTRY As Long = &H1Private Const EDITED_CACHE_ENTRY As Long = &H8Private Const TRACK_OFFLINE_CACHE_ENTRY As Long = &H10Private Const TRACK_ONLINE_CACHE_ENTRY As Long = &H20Private Const STICKY_CACHE_ENTRY As Long = &H40Private Const SPARSE_CACHE_ENTRY As Long = &H10000Private Const COOKIE_CACHE_ENTRY As Long = &H100000Private Const URLHISTORY_CACHE_ENTRY As Long = &H200000Private 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_ENTRYPrivate Type FILETIME    dwLowDateTime As Long    dwHighDateTime As LongEnd TypePrivate 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 LongEnd TypePrivate Declare Function FindFirstUrlCacheEntry Lib "wininet" _                                                Alias "FindFirstUrlCacheEntryA" _                                                (ByVal lpszUrlSearchPattern As String, _                                                 lpFirstCacheEntryInfo As Any, _                                                 lpdwFirstCacheEntryInfoBufferSize As Long) As LongPrivate Declare Function FindNextUrlCacheEntry Lib "wininet" _                                               Alias "FindNextUrlCacheEntryA" _                                               (ByVal hEnumHandle As Long, _                                                lpNextCacheEntryInfo As Any, _                                                lpdwNextCacheEntryInfoBufferSize As Long) As LongPrivate Declare Function FindCloseUrlCache Lib "wininet" _                                           (ByVal hEnumHandle As Long) As LongPrivate Declare Function DeleteUrlCacheEntry Lib "wininet" _                                             Alias "DeleteUrlCacheEntryA" _                                             (ByVal lpszUrlName As String) As LongPrivate Declare Sub CopyMemory Lib "kernel32" _                               Alias "RtlMoveMemory" _                               (pDest As Any, _                                pSource As Any, _                                ByVal dwLength As Long)Private Declare Function lstrcpyA Lib "kernel32" _                                  (ByVal RetVal As String, ByVal Ptr As Long) As LongPrivate Declare Function lstrlenA Lib "kernel32" _                                  (ByVal Ptr As Any) As LongPrivate Declare Function LocalAlloc Lib "kernel32" _                                    (ByVal uFlags As Long, _                                     ByVal uBytes As Long) As LongPrivate Declare Function LocalFree Lib "kernel32" _                                   (ByVal hMem As Long) As LongPublic Sub ClearIECache()    Dim icei As INTERNET_CACHE_ENTRY_INFO    Dim hFile As Long    Dim cachefile As String    Dim posUrl As Long    Dim posEnd As Long    Dim dwBuffer As Long    Dim pntrICE As Long        hFile = FindFirstUrlCacheEntry(0&, ByVal 0, dwBuffer)        If (hFile = ERROR_CACHE_FIND_FAIL) And _       (Err.LastDllError = ERROR_INSUFFICIENT_BUFFER) Then                pntrICE = LocalAlloc(LMEM_FIXED, dwBuffer)                If pntrICE <> 0 Then            CopyMemory ByVal pntrICE, dwBuffer, 4            hFile = FindFirstUrlCacheEntry(vbNullString, _                                           ByVal pntrICE, _                                           dwBuffer)                        If hFile <> ERROR_CACHE_FIND_FAIL Then                Do                    CopyMemory icei, ByVal pntrICE, Len(icei)                    If (icei.CacheEntryType And _                        NORMAL_CACHE_ENTRY) = NORMAL_CACHE_ENTRY Then                                                cachefile = GetStrFromPtrA(icei.lpszSourceUrlName)                        If Left(cachefile, 8) <> "Visited:" Then                            Debug.Print cachefile                            DeleteUrlCacheEntry cachefile                        End If                    End If                                       dwBuffer = 0                    Call FindNextUrlCacheEntry(hFile, ByVal 0, dwBuffer)                                        pntrICE = LocalAlloc(LMEM_FIXED, dwBuffer)                    CopyMemory ByVal pntrICE, dwBuffer, 4                Loop While FindNextUrlCacheEntry(hFile, ByVal pntrICE, dwBuffer)            End If    'hFile        End If    'pntrICE    End If    'hFile        Call LocalFree(pntrICE)    Call FindCloseUrlCache(hFile)End SubPrivate Function GetStrFromPtrA(ByVal lpszA As Long) As String    GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0)    Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)End Function

 

调用方法:Call ClearIECache