Option Explicit
Private Declare Function GetUrlCacheEntryInfo Lib "wininet.dll" Alias "GetUrlCacheEntryInfoW" (ByVal szUrlName As Long, ByRef lpCacheEntryInfo As Any, ByRef lpdwCacheEntryInfoBufferSize As Long) As Long
Private Declare Function SysAllocString Lib "oleaut32.dll" (ByVal pOlechar As Long) As String
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Private Type INTE_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
dwReserved As Long
End Type
Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
'(声明:魏滔序原创,转贴请注明出处。)
Public Function GetCachePath(lpszUrl As String) As String
Dim dwEntrySize As Long
Dim lpCacheEntry As INTE_CACHE_ENTRY_INFO
Dim tarr() As Byte
Call GetUrlCacheEntryInfo(StrPtr(lpszUrl), ByVal 0, dwEntrySize)
If dwEntrySize > 0 Then
ReDim tarr(0 To dwEntrySize)
Call GetUrlCacheEntryInfo(StrPtr(lpszUrl), tarr(0), dwEntrySize)
CopyMem ByVal lpCacheEntry, tarr(0), Len(lpCacheEntry)
GetCachePath = SysAllocString(lpCacheEntry.lpszLocalFileName)
GetCachePath = StrConv(GetCachePath, vbFromUnicode)
End If
End Function