Main.bas
上传用户:davilee3
上传日期:2015-04-22
资源大小:986k
文件大小:7k
源码类别:

浏览器

开发平台:

Visual Basic

  1. Attribute VB_Name = "mMain"
  2. Option Explicit
  3. Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal ByteLen As Long)
  4. 'public Declare Function SysAllocString Lib "oleaut32.dll" (ByVal pOlechar As Long) As String
  5. Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
  6. Public Declare Function FindFirstUrlCacheGroup Lib "wininet.dll" ( _
  7.     ByVal dwFlags As Long, _
  8.     ByVal dwFilter As Long, _
  9.     ByRef lpSearchCondition As Long, _
  10.     ByVal dwSearchCondition As Long, _
  11.     ByRef lpGroupId As Date, _
  12.     ByRef lpReserved As Long) As Long
  13. Public Declare Function FindNextUrlCacheGroup Lib "wininet.dll" ( _
  14.     ByVal hFind As Long, _
  15.     ByRef lpGroupId As Date, _
  16.     ByRef lpReserved As Long) As Long
  17. Public Declare Function DeleteUrlCacheGroup Lib "wininet.dll" ( _
  18.     ByVal sGroupID As Date, _
  19.     ByVal dwFlags As Long, _
  20.     ByRef lpReserved As Long) As Long
  21. Public Declare Function FindFirstUrlCacheEntry Lib "wininet.dll" Alias "FindFirstUrlCacheEntryA" ( _
  22.     ByVal lpszUrlSearchPattern As String, _
  23.     ByRef lpFirstCacheEntryInfo As INTERNET_CACHE_ENTRY_INFO, _
  24.     ByRef lpdwFirstCacheEntryInfoBufferSize As Long) As Long
  25. 'public Type INTERNET_CACHE_ENTRY_INFO
  26. '    dwStructSize As Long
  27. '    szRestOfData(1024) As Long
  28. 'End Type
  29. Public Type FILETIME
  30.     dwLowDateTime As Long
  31.     dwHighDateTime As Long
  32. End Type
  33. Public Type INTERNET_CACHE_ENTRY_INFO
  34.     dwStructSize As Long
  35.     lpszSourceUrlName As Long
  36.     lpszLocalFileName As Long
  37.     CacheEntryType As Long
  38.     dwUseCount As Long
  39.     dwHitRate As Long
  40.     dwSizeLow As Long
  41.     dwSizeHigh As Long
  42.     LastModifiedTime As FILETIME
  43.     ExpireTime As FILETIME
  44.     LastAccessTime As FILETIME
  45.     LastSyncTime As FILETIME
  46.     lpHeaderInfo As Long
  47.     dwHeaderInfoSize As Long
  48.     lpszFileExtension As Long
  49.     dwReserved As Long
  50.     bff(0 To 2048) As Byte
  51. '    union {
  52. '        DWORD dwReserved;
  53. '        DWORD dwExemptDelta;
  54. '    }
  55. End Type
  56. Public Const COOKIE_CACHE_ENTRY As Long = &H100000
  57. Public Const URLHISTORY_CACHE_ENTRY As Long = &H200000
  58. Public Const NORMAL_CACHE_ENTRY As Long = &H1
  59. Public Const TRACK_OFFLINE_CACHE_ENTRY As Long = &H10
  60. Public Const TRACK_ONLINE_CACHE_ENTRY As Long = &H20
  61. Public Declare Function DeleteUrlCacheEntry Lib "wininet.dll" Alias "DeleteUrlCacheEntryA" ( _
  62.     ByVal lpszUrlName As Long) As Long
  63. Public Declare Function FindNextUrlCacheEntry Lib "wininet.dll" Alias "FindNextUrlCacheEntryA" ( _
  64.     ByVal hEnumHandle As Long, _
  65.     ByRef lpNextCacheEntryInfo As INTERNET_CACHE_ENTRY_INFO, _
  66.     ByRef lpdwNextCacheEntryInfoBufferSize As Long) As Long
  67. Public Const CACHGROUP_SEARCH_ALL = &H0
  68. Public Const ERROR_NO_MORE_FILES = 18
  69. Public Const ERROR_NO_MORE_ITEMS = 259
  70. Public Const CACHEGROUP_FLAG_FLUSHURL_ONDELETE = &H2
  71. Public Const BUFFERSIZE = 2048
  72. Sub main()
  73. Dim tFrm As frmMain
  74. Select Case Command
  75.     Case "normal"
  76.         Call DelCache("*.*", URLHISTORY_CACHE_ENTRY Or COOKIE_CACHE_ENTRY)
  77.     Case "cookie"
  78.         Call DelCache("cookie:")
  79.     Case "visited"
  80.         Call DelCache("visited:")
  81.     Case "all"
  82.         Call DelCache("*.*")
  83.     Case Else
  84.         Set tFrm = New frmMain
  85.         tFrm.Show
  86.         Set tFrm = Nothing
  87. End Select
  88. End Sub
  89. Public Sub DelCache(vUrlSearchPattern As String, Optional vExcluded As Long = 0)
  90.     Dim sGroupID As Date
  91.     Dim hGroup As Long
  92.     Dim hFile As Long
  93.     Dim sEntryInfo As INTERNET_CACHE_ENTRY_INFO
  94.     Dim iSize As Long
  95.     On Error Resume Next
  96.     ' Delete the groups
  97.     hGroup = FindFirstUrlCacheGroup(0, 0, 0, 0, sGroupID, 0)
  98.     ' To avoid error using it with IE4 as FindFirstUrlCacheGroup is not implemented
  99.     If Err.Number <> 453 Then
  100.         If (hGroup = 0) And (Err.LastDllError <> 2) Then
  101.             'MsgBox "An error occurred enumerating the cache groups" & Err.LastDllError
  102.             Debug.Print "An error occurred enumerating the cache groups" & Err.LastDllError
  103.             Exit Sub
  104.         End If
  105.     Else
  106.         Err.Clear
  107.     End If
  108.     If (hGroup <> 0) Then
  109.         'we succeeded in finding the first cache group.. enumerate and
  110.         'delete
  111.         Do
  112.             If (0 = DeleteUrlCacheGroup(sGroupID, CACHEGROUP_FLAG_FLUSHURL_ONDELETE, 0)) Then
  113.                ' To avoid error using it with IE4 as FindFirstUrlCacheGroup is not implemented
  114.                If Err.Number <> 453 Then
  115.                  'MsgBox "Error deleting cache group " & Err.LastDllError
  116.                  Debug.Print "Error deleting cache group " & Err.LastDllError
  117.                  Exit Sub
  118.                Else
  119.                   Err.Clear
  120.                End If
  121.             End If
  122.             iSize = BUFFERSIZE
  123.             If (0 = FindNextUrlCacheGroup(hGroup, sGroupID, iSize)) And (Err.LastDllError <> 2) Then
  124.                 'MsgBox "Error finding next url cache group! - " & Err.LastDllError
  125.                 Debug.Print "Error finding next url cache group! - " & Err.LastDllError
  126.             End If
  127.         Loop Until Err.LastDllError = 2
  128.     End If
  129.   ' Delete the files
  130.     sEntryInfo.dwStructSize = 80
  131.     iSize = BUFFERSIZE
  132.     hFile = FindFirstUrlCacheEntry(vUrlSearchPattern, sEntryInfo, iSize)
  133.     If (hFile = 0) Then
  134.         If (Err.LastDllError = ERROR_NO_MORE_ITEMS) Then
  135.             'GoTo done
  136.             Exit Sub
  137.         End If
  138.         'MsgBox "ERROR: FindFirstUrlCacheEntry - " & Err.LastDllError
  139.         Debug.Print "ERROR: FindFirstUrlCacheEntry - " & Err.LastDllError
  140.         Exit Sub
  141.     End If
  142.         
  143.     Do
  144.         If (sEntryInfo.CacheEntryType And vExcluded) = 0 Then
  145.             If (0 = DeleteUrlCacheEntry(sEntryInfo.lpszSourceUrlName)) _
  146.                 And (Err.LastDllError <> 2) Then
  147.                 Err.Clear
  148.             End If
  149.         End If
  150.         iSize = BUFFERSIZE
  151.         If (0 = FindNextUrlCacheEntry(hFile, sEntryInfo, iSize)) And (Err.LastDllError <> ERROR_NO_MORE_ITEMS) Then
  152.             'MsgBox "Error:  Unable to find the next cache entry - " & Err.LastDllError
  153.             Debug.Print "Error:  Unable to find the next cache entry - " & Err.LastDllError
  154.             Exit Sub
  155.         End If
  156.                 
  157.     Loop Until Err.LastDllError = ERROR_NO_MORE_ITEMS
  158.     
  159. End Sub
  160. Public Function Ptr2StrW(Ptr As Long) As String
  161. Dim sRtn() As Byte
  162.     ' Check if the pointer is valid
  163.     If Ptr <> 0 Then
  164.     
  165.         ReDim sRtn(lstrlen(ByVal Ptr) - 1)
  166.         
  167.         ' Copy the string to the byte array
  168.         CopyMemory sRtn(0), ByVal Ptr, UBound(sRtn) + 1
  169.         Ptr2StrW = sRtn()
  170.         
  171.     End If
  172.     
  173. End Function