通过API访问IE Cache
我们知道在使用IE浏览网页时,IE会把远端主机的内容保存在本机以供以后脱机访问。下面将介绍的是如何通过Delphi编程实现遍历Cache中所有保存的内容。
如果大家对Windows API编程比较熟悉的话,应该知道对于遍历访问一般有两种办法,一是定义一个回调函数,然后将回调函数地址传递给遍历函数,当遍历到一个内容时就会调用回调函数一次,例如EnumWindows函数。另外一种是先利用一个API函数建立一个局柄,然后以这个局柄作为遍历函数的参数,我们可以通过反复调用遍历函数知道返回False,例如FindFirstFile以及FindNextFile函数。对IE Cache的遍历使用的是第二种方法,即首先调用FindFirstUrlCacheEntryEx,如果成功返回一个局柄,然后通过重复调用FindNextUrlCacheEntryEx知道函数返回False,这样就可以实现对Cache中所有文件的遍历。
下面来看程序,建立一个新工程,然后在Form1中分别加入两个TButton组件以及两个TListBox组件,Form1的完整代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Wininet, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
ListBox2: TListBox;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
function FindNextEntrys(Handle:Integer):Boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function TForm1.FindNextEntrys(Handle:Integer):Boolean;
var
T: PInternetCacheEntryInfo;
D: DWORD;
begin
D := 0;
FindnextUrlCacheEntryEx(Handle, nil, @D, nil, nil, nil);
GetMem(T, D);
try
if FindNextUrlCacheEntryEx(Handle, T, @D, nil, nil, nil) then begin
ListBox1.Items.Add(T.lpszSourceUrlName);
ListBox2.Items.Add(T.lpszLocalFileName);
Result := True;
end
else
Result := False;
finally
FreeMem(T, D)
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
H:Integer;
T: PInternetCacheEntryInfo;
D: DWORD;
begin
D := 0;
FindFirstUrlCacheEntryEx(nil, 0, NORMAL_CACHE_ENTRY, 0,nil,@D, nil, nil, nil);
GetMem(T, D);
try
H := FindFirstUrlCacheEntryEx(nil,0, NORMAL_CACHE_ENTRY, 0, T, @D, nil, nil, nil);
if (H = 0) then
else begin
repeat
until not FindNextEntrys(H);
FindCloseUrlCache(H);
end
finally
FreeMem(T, D)
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
URL:String;
begin
If ListBox1.ItemIndex >=0 then begin
URL:=ListBox1.Items.Strings[ListBox1.ItemIndex];
Self.Caption := URL;
if DeleteUrlCacheEntry(PChar(URL))then
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;
end;
end.
运行程序,点击Button1,就可以分别在ListBox1中列出所有在Cache中的文件所对应的URL以及在ListBox2中列出相应的文件名。在ListBox1中选择一个列表,然后点击 Button2 就可以将该项从Cache中删除。
下面看程序,FindFirstUrlCacheEntryEx函数在Delphi中定义如下:
function FindFirstUrlCacheEntryExA(lpszUrlSearchPattern: PAnsiChar;
dwFlags: DWORD;
dwFilter: DWORD;
GroupId: GROUPID;
lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
lpdwFirstCacheEntryInfoBufferSize: LPDWORD;
lpGroupAttributes: Pointer; { 必须为 nil }
pcbGroupAttributes: LPDWORD; {必须为 nil }
lpReserved: Pointer { 必须为 nil }
): THandle; stdcall;
其中,dwFilter定义查找类型,在这里定义为NORMAL_CACHE_ENTRY以查找普通的Cache文件,GroupId定义查找分组,在这里定义为0以查找所有分组。lpFirstCacheEntryInfo定义Cache文件数据结构。该结构在Wininet.pas中有定义,这里就不列出了,其中成员lpszSourceUrlName以及lpszLocalFileName分别定义文件URL以及本地文件名。
在上面的程序中我们可以看到,不论调用FindFirstUrlCacheEntryEx还是FindNextUrlCacheEntryEx,都需要调用两次,第一次获得一个指向PInternetCacheEntryInfo结构的指针,将这个指针通过GetMem函数赋予一个PInternetCacheEntryInfo结构数据。然后第二次调用才可以获得结果。遍历访问完毕后需要调用FindCloseUrlCache方法关闭打开的局柄。
上面介绍的是Cache操作中的遍历Cache文件以及删除Cache文件的操作。Cache操作函数还包括:分组函数,可以将特定的文件分在一个组内并执行组操作,例如:CreateUrlCacheGroup、SetUrlCacheEntryGroup;数据流(Stream)操作函数,可以将Cache中的内容输入到数据流中。等等。大家可以参考MSDN中的帮助,或者到我的主页 http://www.applevb.com 同我讨论以及获得源程序。
以上程序在Win2000、Delphi 5下编写,Win2000、Win98下运行通过。
分享到:
相关推荐
赠送jar包:cache-api-1.1.1.jar; 赠送原API文档:cache-api-1.1.1-javadoc.jar; 赠送源代码:cache-api-1.1.1-sources.jar; 赠送Maven依赖信息文件:cache-api-1.1.1.pom; 包含翻译后的API文档:cache-api-...
IECACHE 0621 final IE缓存提取工具 可以提取缓存在ie里面的 视频 音频 图片等
赠送jar包:cache-api-1.1.1.jar; 赠送原API文档:cache-api-1.1.1-javadoc.jar; 赠送源代码:cache-api-1.1.1-sources.jar; 赠送Maven依赖信息文件:cache-api-1.1.1.pom; 包含翻译后的API文档:cache-api-...
获取IeCache目录关于vb网络的编程基础知识winsock控件的使用,简单的聊天程序,局域网的网络编程
提取ie cache,利用c#编写,调用windows API
cache-api-1.0.0.jar JSR107FinalSpecification ,缓存规范
IE缓存提取,并还原成被抓网站原始路径,只要IE浏览过的网页或文件,都可被导出
pip install fastapi-cache 用法示例 from fastapi import Depends , FastAPI from fastapi_cache import caches , close_caches from fastapi_cache . backends . redis import CACHE_KEY , RedisCacheBackend app ...
apicache, 用于 express/node的简单API缓存中间件 是一个简单的API响应缓存中间件,使用简单的英语持续。 支持Redis或者内置内存引擎,自动清除。 为什么?因为简单数据/响应的路由缓存也应该简单。安装npm install ...
Strathweb.CacheOutput, 允许你缓存ApiControllers输出的ASP.NET Web API CacheOutput库 ASP.NET Web API CacheOutput与"outputcacheattribute"类似的小型库,类似于mvc的,用于 Web API 操作。CacheOutput 将负责...
包含翻译后的API文档:shiro-cache-1.4.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.shiro:shiro-cache:1.4.0; 标签:apache、shiro、cache、中英对照文档、jar包、java; 使用方法:...
Api-wp-rest-api-cache.zip,为wordpress rest api启用缓存并提高应用程序wp rest api缓存的速度,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并...
JetCache是一个基于java的缓存系统...通过统一的API访问Cache系统 通过注解实现声明式的方法缓存 通过注解创建并配置Cache实例 针对所有Cache实例和方法缓存的自动统计 Key的生成策略和value的序列化策略是可以配置的
jar包,亲测可用
包含翻译后的API文档:shiro-cache-1.4.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.shiro:shiro-cache:1.4.0; 标签:apache、shiro、cache、中文文档、jar包、java; 使用方法:解压翻译后的API...
jp-rest-cache, 用于 WordPress REST API的高速缓存( API ) 缓存软过期,服务器端缓存用于 WordPress REST API ( WP REST ) 。利用jaquith库的标记。 需要WordPress和 WordPress REST API 。请注意使用时请注意两种...
import apicache from 'apicache' let app = express ( ) let cache = apicache . middleware app . get ( '/api/collection/:id?' , cache ( '5 minutes' ) , ( req , res ) => { // do some work... this will ...
JavaScript对API数据的缓存组件,可以利用localStorage来存储不常更新但经常访问的接口数据,通过设置缓存时间来控制实际发起请求的最小时间间隔。 浏览器兼容性 需要支持localStorage和JSON,请参考、 依赖 目前...
Cachecloud文档Cachecloud文档
cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验cache实验...