求精简!下面的代码精简到只需要点击一个按钮就可以删除IE缓存!下面的代码是点击command3就可以清除IE缓存临时文件了。请问怎么在精简一下?我精简了半天,总是出错,或者直接就不能删除缓存了!!默认在form窗体上加入 command1,command2,command3,List1,Label1,这5个控件,什么都不用改,加入下面的代码,就可以实现删除缓存了,求大神给精简一下,精简成按一个按钮command就可以有删除IE缓存的效果,不需要List1,Label1乱起八糟的!!代码如下!大神出手吧!!!谢谢啊!!代码看2楼吧,没字符了

解决方案 »

  1.   

    本帖最后由 bcrun 于 2012-11-18 12:44:49 编辑
      

  2.   

    Option ExplicitPrivate Const ERROR_CACHE_FIND_FAIL As Long = 0
    Private Const ERROR_CACHE_FIND_SUCCESS As Long = 1
    Private Const ERROR_FILE_NOT_FOUND As Long = 2
    Private Const ERROR_ACCESS_DENIED As Long = 5
    Private Const ERROR_INSUFFICIENT_BUFFER As Long = 122
    Private Const MAX_PATH As Long = 260
    Private Const MAX_CACHE_ENTRY_INFO_SIZE As Long = 4096Private Const LMEM_FIXED As Long = &H0
    Private Const LMEM_ZEROINIT As Long = &H40
    Private Const LPTR As Long = (LMEM_FIXED Or LMEM_ZEROINIT)Private Const NORMAL_CACHE_ENTRY As Long = &H1
    Private Const EDITED_CACHE_ENTRY As Long = &H8
    Private Const TRACK_OFFLINE_CACHE_ENTRY As Long = &H10
    Private Const TRACK_ONLINE_CACHE_ENTRY As Long = &H20
    Private Const STICKY_CACHE_ENTRY As Long = &H40
    Private Const SPARSE_CACHE_ENTRY As Long = &H10000
    Private Const COOKIE_CACHE_ENTRY As Long = &H100000
    Private Const URLHISTORY_CACHE_ENTRY As Long = &H200000
    Private 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
    Private Type FILETIME
       dwLowDateTime As Long
       dwHighDateTime As Long
    End 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 Long
    End 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 Long
       
    Private 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 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
             
    Private Sub Form_Load()   Label1.Caption = ""End Sub
    Private Sub Form_Resize()   If Me.WindowState <> vbMinimized Then
       
          If Me.Width > 3000 Then
          
             With Command1
                .Left = Me.ScaleWidth - .Width - 200
                .Top = 200
             End With
             
             With Command2
                .Left = Command1.Left
                .Top = Command1.Top + Command1.Height + 100
             End With
             
             With Command3
                .Left = Command1.Left
                .Top = Command2.Top + Command2.Height + 100
             End With
             
             With Label1
                .Left = 200
                .Top = Me.ScaleHeight - 100 - Label1.Height
             End With
             
             With List1
                .Left = 200
                .Top = 200
                .Width = Command1.Left - 300
                .Height = (Me.ScaleHeight - 300) - (Me.ScaleHeight - Label1.Top)
             End With
          
          End If
          
       End If
       
    End Sub
    Private Sub Command1_Click()   With List1
       
         'this speeds up adding to the list
         'and eliminates list flicker
          .Visible = False
          .Clear
          Call GetCacheURLList
          .Visible = True
          
          Label1.Caption = .ListCount & " files listed."
          
       End WithEnd Sub
    Private Sub Command2_Click()   Dim cachefile As String
       Dim currindex As Long
       Dim currtopindex As Long
       
      'delete the selected file
       With List1
       
         'because we're going to reload
         'the cache following the deletion,
         'be nice and save the current list
         'position so it can be restored later
          currtopindex = .TopIndex
          currindex = .ListIndex
          cachefile = .List(currindex)
          
          Call DeleteUrlCacheEntry(cachefile)
          
         'reload the list, hiding the list box
         'to prevent flicker. (This workaround
         'will not provided the desired results
         'if a DoEvents is added to the
         'GetCacheURLList routine!)
         
          .Visible = False
          GetCacheURLList
          .TopIndex = currtopindex
          
          If currindex >= .ListCount Then
             .ListIndex = currindex - 1
          Else
             .ListIndex = currindex
          End If
          
          .Visible = True
          
          Label1.Caption = .ListCount & " files listed."
       
       End With
       
    End Sub
    Private Sub Command3_Click()   Dim cachefile As String
       Dim cnt As Long
      
       With List1
      
         'delete all files
          For cnt = 0 To .ListCount - 1
          
             cachefile = .List(cnt)
             
            'if the file is a cookie let's not
            'delete it in case it is used to
            'store password data.
            '
            'remove the Instr() test if you want
            'to delete cookies as well
             If InStr(cachefile, "Cookie") = 0 Then
                Call DeleteUrlCacheEntry(cachefile)
             End If
          Next
       
          .Visible = False
          GetCacheURLList
          .ListIndex = -1
          .Visible = True
          
          Label1.Caption = .ListCount & " files listed."
          
       End With
       
    End SubPrivate Sub GetCacheURLList()
        
       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
       
       List1.Clear
       
      'Like other APIs, calling FindFirstUrlCacheEntry or
      'FindNextUrlCacheEntry with an buffer of insufficient
      'size will cause the API to fail. Call first to
      'determine the required buffer size.
       hFile = FindFirstUrlCacheEntry(0&, ByVal 0, dwBuffer)
       
      'both conditions should be met by the first call
       If (hFile = ERROR_CACHE_FIND_FAIL) And _
          (Err.LastDllError = ERROR_INSUFFICIENT_BUFFER) Then
       
         'The INTERNET_CACHE_ENTRY_INFO data type
         'is a variable-length UDT. It is therefore
         'necessary to allocate memory for the result
         'of the call and to pass a pointer to this
         'memory location to the API.
          pntrICE = LocalAlloc(LMEM_FIXED, dwBuffer)
            
         'allocation successful
          If pntrICE <> 0 Then
             
            'set a Long pointer to the memory location
             CopyMemory ByVal pntrICE, dwBuffer, 4
             
            'call FindFirstUrlCacheEntry again
            'now passing the pointer to the
            'allocated memory
             hFile = FindFirstUrlCacheEntry(vbNullString, _
                                            ByVal pntrICE, _
                                            dwBuffer)
           
            'hfile should = 1 (success)
             If hFile <> ERROR_CACHE_FIND_FAIL Then
             
               'loop through the cache
                Do
                
                  'the pointer has been filled, so move the
                  'data back into a ICEI structure
                   CopyMemory icei, ByVal pntrICE, Len(icei)
                
                  'CacheEntryType is a long representing
                  'the type of entry returned
                   If (icei.CacheEntryType And _
                       NORMAL_CACHE_ENTRY) = NORMAL_CACHE_ENTRY Then
                   
                     'extract the string from the memory location
                     'pointed to by the lpszSourceUrlName member
                     'and add to a list
                      cachefile = GetStrFromPtrA(icei.lpszSourceUrlName)
                      List1.AddItem cachefile               End If
                   
                  'free the pointer and memory associated
                  'with the last-retrieved file
                   Call LocalFree(pntrICE)
                   
                  'and again by repeating the procedure but
                  'now calling FindNextUrlCacheEntry. Again,
                  'the buffer size set to 0 causing the call
                  'to fail and return the required size as dwBuffer
                   dwBuffer = 0
                   Call FindNextUrlCacheEntry(hFile, ByVal 0, dwBuffer)
                   
                  'allocate and assign the memory to the pointer
                   pntrICE = LocalAlloc(LMEM_FIXED, dwBuffer)
                   CopyMemory ByVal pntrICE, dwBuffer, 4
                   
               'and call again with the valid parameters.
               'If the call fails (no more data), the loop exits.
               'If the call is successful, the Do portion of the
               'loop is executed again, extracting the data from
               'the returned type
                Loop While FindNextUrlCacheEntry(hFile, ByVal pntrICE, dwBuffer)
             End If 'hFile
          End If 'pntrICE
       End If 'hFile
       
      'clean up by closing the find handle,
      'as well as calling LocalFree again
      'to be safe
       Call LocalFree(pntrICE)
       Call FindCloseUrlCache(hFile)
       
    End Sub
    Private Function GetStrFromPtrA(ByVal lpszA As Long) As String   GetStrFromPtrA = String$(lstrlenA(ByVal lpszA), 0)
       Call lstrcpyA(ByVal GetStrFromPtrA, ByVal lpszA)
       
    End FunctionPrivate Sub Label1_Click()End Sub