📄 177.htm
字号:
<p>判断一个文件是否在IE的缓存中 </p>
<p></p>
<p>当你建立一个联到网上文件的快捷方式时,你可能需要知道它是否已经被访问过,于是你就可以适当地改变链接的颜色等等。这则小技巧</p>
<p>就是告诉你如何判断一个文件是否在Internet Explorer的缓存中,以满足你的须要。</p>
<p> 新建一个项目、添加一个模块。将以下代码写到模块里:</p>
<p></p>
<p>Private Const ERROR_INSUFFICIENT_BUFFER = 122</p>
<p>Private Const eeErrorBase = 26720</p>
<p></p>
<p>Private Type FILETIME</p>
<p> dwLowDateTime As Long</p>
<p> dwHighDateTime As Long</p>
<p>End Type</p>
<p></p>
<p>Private Type INTERNET_CACHE_ENTRY_INFO</p>
<p> dwStructSize As Long</p>
<p> lpszSourceUrlName As String</p>
<p> lpszLocalFileName As String</p>
<p> CacheEntryType As String</p>
<p> dwUseCount As Long</p>
<p> dwHitRate As Long</p>
<p> dwSizeLow As Long</p>
<p> dwSizeHigh As Long</p>
<p> LastModifiedTime As FILETIME</p>
<p> ExpireTIme As FILETIME</p>
<p> LastAccessTime As FILETIME</p>
<p> LastSyncTime As FILETIME</p>
<p> lpHeaderInfo As Long</p>
<p> dwHeaderInfoSize As Long</p>
<p> lpszFileExtension As String</p>
<p> dwReserved As Long</p>
<p>End Type</p>
<p></p>
<p>Private Declare Function GetUrlCacheEntryInfo Lib "wininet.dll" _</p>
<p>Alias "GetUrlCacheEntryInfoA" (ByVal sUrlName As String, _</p>
<p> lpCacheEntryInfo As Any, lpdwCacheEntryInfoBufferSize _</p>
<p> As Long) As Long</p>
<p></p>
<p>注释:用来报告API产生的错误:</p>
<p>Private Const FORMAT_MESSAGE_ALLOCATE_BUFFER = &H100</p>
<p>Private Const FORMAT_MESSAGE_ARGUMENT_ARRAY = &H2000</p>
<p>Private Const FORMAT_MESSAGE_FROM_HMODULE = &H800</p>
<p>Private Const FORMAT_MESSAGE_FROM_STRING = &H400</p>
<p>Private Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000</p>
<p>Private Const FORMAT_MESSAGE_IGNORE_INSERTS = &H200</p>
<p>Private Const FORMAT_MESSAGE_MAX_WIDTH_MASK = &HFF</p>
<p>Private Declare Function FormatMessage Lib "kernel32" Alias _</p>
<p> "FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, _</p>
<p> ByVal dwMessageId As Long, ByVal dwLanguageId As Long, _</p>
<p> ByVal lpBuffer As String, ByVal nSize As Long, Arguments _</p>
<p> As Long) As Long</p>
<p></p>
<p>Public Function WinAPIError(ByVal lLastDLLError As Long) As String</p>
<p>Dim sBuff As String</p>
<p>Dim lCount As Long</p>
<p></p>
<p> 注释:返回与LastDLLError相关的出错信息:</p>
<p> sBuff = String$(256, 0)</p>
<p> lCount = FormatMessage( _</p>
<p> FORMAT_MESSAGE_FROM_SYSTEM Or FORMAT_MESSAGE_IGNORE_INSERTS, _</p>
<p> 0, lLastDLLError, 0&, sBuff, Len(sBuff), ByVal 0)</p>
<p> If lCount Then</p>
<p> WinAPIError = Left$(sBuff, lCount)</p>
<p> End If</p>
<p></p>
<p>End Function</p>
<p></p>
<p>Public Function GetCacheEntryInfo(ByVal hWnd As Long, _</p>
<p> ByVal lpszUrl As String) As Boolean</p>
<p></p>
<p>Dim dwEntrySize As Long</p>
<p>Dim lpCacheEntry As INTERNET_CACHE_ENTRY_INFO</p>
<p>Dim dwTemp As Long</p>
<p>Dim lErr As Long</p>
<p></p>
<p> If (GetUrlCacheEntryInfo(lpszUrl, ByVal 0&, dwEntrySize)) = 0 Then</p>
<p> lErr = Err.LastDllError</p>
<p> If (lErr <> ERROR_INSUFFICIENT_BUFFER) Then</p>
<p> 注释:预料外的错误。须要显示出错原因:</p>
<p> Err.Raise eeErrorBase + 1, _</p>
<p> App.EXEName & ".mCacheEntry", WinAPIError(lErr)</p>
<p></p>
<p> GetCacheEntryInfo = False</p>
<p> Exit Function</p>
<p> Else</p>
<p> 注释:这是预料中的错误</p>
<p> GetCacheEntryInfo = True</p>
<p> End If</p>
<p> End If</p>
<p></p>
<p>End Function</p>
<p></p>
<p></p>
<p>在窗体上添加一个Command和一个Text。然后加入这些代码:</p>
<p></p>
<p>Option Explicit </p>
<p></p>
<p>Private Sub Command1_Click() </p>
<p>On Error Goto ErrorHandler</p>
<p> 注释:检查Text中的URL地址是否出现在缓存中:</p>
<p> If (GetCacheEntryInfo(Me.hWnd, Text1.Text)) Then</p>
<p> MsgBox "URL In Cache.", vbInformation</p>
<p> Else</p>
<p> MsgBox "URL Not In Cache.", vbInformation</p>
<p> End If</p>
<p></p>
<p>Exit Sub</p>
<p></p>
<p>ErrorHandler:</p>
<p> MsgBox "URL Not in Cache [" & Err.Description & "]",vbInformation</p>
<p></p>
<p>End Sub</p>
<p></p>
<p> 运行,在Text中键入一个URL地址(比如,http://www.vbaccelerator.com/index.html)当你按下Command按钮时,就会得到一则消息报告URL在不在缓存中。如果Windows给出了URL没找到的原因,它将被显示在随后的的方括号内。 </p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -