`
lovnet
  • 浏览: 6945453 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

通过API访问IE Cache

阅读更多

通过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下运行通过。

分享到:
评论

相关推荐

    ie cache提取

    总结来说,通过C#和Windows API,我们可以实现高效地提取和分析IE浏览器的缓存数据。这不仅有助于理解用户的网络行为,也可以为开发者提供调试和问题解决的手段。在实际应用中,可能需要根据具体需求对代码进行调整...

    利用WinInetAPI清除特定网站的IE缓存

    这些信息可以通过 `INTERNET_CACHE_ENTRY_INFO` 类型来表示。 在实际应用中,我们可以使用 WinInetAPI 来实现各种缓存相关的功能,如清除缓存、遍历缓存、获取缓存信息等。这些功能对于开发 Web 应用程序非常有用。...

    获得IE临时文件的示例

    API是一组预定义的函数、类和常量,允许开发者通过调用它们来实现特定的功能或操作。在Windows操作系统中,Windows API提供了丰富的功能,包括访问文件系统、控制进程和线程等。 对于获取IE临时文件路径,我们主要...

    使用IE或Edge浏览器通过SAS访问File文件只能访问一次问题分析-xiaoqiang1

    标题涉及的问题是在使用Internet Explorer(IE)或Microsoft Edge浏览器通过Shared Access Signature(SAS)访问Azure File Storage中的文件时遇到的。当尝试通过SAS URL多次访问同一个File Storage文件时,IE和Edge...

    IE缓存读取

    2. **编程访问**:开发者可以通过编程方式读取IE缓存,例如在Delphi中,可以使用TWebBrowser组件结合Windows API函数,或者直接操作文件系统来访问`Temporary Internet Files`目录。 **清除IE缓存** 为了保护隐私或...

    Cache-control使用Cache-control:private学习笔记

    - **打开新窗口**: 所有Cache-Control指令,包括private、no-cache和must-revalidate,都会导致首次访问时请求服务器。对于max-age,只要未超过指定时间,后续访问可使用缓存。 - **地址栏回车**: private和must-...

    IE.rar_IE_delphi list

    通过这种方式,开发者可以利用Delphi的强类型和面向对象特性,结合Windows API,实现高效且灵活的系统级功能,例如获取和分析IE的历史记录列表。这样的技术对于数据分析、系统监控、软件审计或者用户行为研究等领域...

    IE浏览器密码破解,破解浏览器密码

    1. 找到存储密码的注册表位置:通常在`HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\WebCache`或`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Password`。 2. 寻找加密的密码数据,这通常...

    淘宝客api程序 2.0

    2.支持API商品数据缓存,全面提高网页访问速度,更重要的是减少API调用次数,从而避免因API每分钟调用频率过高导致无法获取商品数据的问题。 3:全面支持中文淘宝昵称,从而使淘宝昵称为中文的淘宝客也能使用API...

    使不支持ie的标签支持ie——html5.js

    除了新标签外,HTML5.js也可能包含对其他HTML5特性的支持,比如离线存储(Application Cache)、拖放功能(Drag and Drop API)、媒体元素(和)以及画布(Canvas)等。通过这种方式,HTML5.js可以帮助开发者构建...

    VB删除IE缓存及cookies资源

    总之,VB可以通过调用Windows API和进行文件操作来实现IE缓存和Cookies的清理。了解这些知识点可以帮助开发者创建自己的隐私保护或系统维护工具,为用户提供更加安全和高效的浏览体验。在实际编程过程中,应始终注意...

    让IE支持HTML5

    2. **离线存储**:通过Application Cache(应用缓存)机制,使得网页可以离线访问。 3. **多媒体支持**:原生支持音频()和视频()元素,无需Flash插件。 4. **Canvas画布**:提供JavaScript API用于在网页上绘制...

    精彩编程与编程技巧-判断文件是否在IE的缓存中...

    通过该函数,我们可以了解特定文件在IE缓存中的状态和细节,比如最后一次访问时间、大小等。 #### 参数说明 - `ByValsUrlNameAsString`: URL名称。 - `lpCacheEntryInfoAsAny`: 指向缓存条目信息结构的指针。 - `...

    IE图片缓存document.execCommand(BackgroundImageCache,false,true)

    基本上,只有开发者才会把cache设置为每次访问检查更新,所以这个bug其实不会影响真正的用户 (根据在winxpsp2的ie6下测试,虽然可能仍然调用了一次网络存取的api,但是并没有发生实际的请求,症状就是鼠标有极短...

    VB 实现清空cookies以及IE缓存的源码

    3. **IE缓存**:Internet Explorer浏览器会将用户访问过的网页内容缓存在本地,以加快后续访问速度。这些缓存文件包括HTML文档、图片、JavaScript和CSS等资源。然而,随着时间的推移,缓存可能会变得过大,导致磁盘...

    C#实现清除IE浏览器缓存的方法

    1. **直接访问IE缓存路径**: 可以通过`Environment.SpecialFolder.InternetCache`获取IE缓存的路径,然后遍历并删除所有文件。然而,这种方法可能会遇到权限问题或文件被占用的情况,如下所示的代码片段: ```...

    JQuery 中文API

    理解jQuery的DOM操作原理,合理使用缓存机制(如`$(...).cache()`)和事件委托(`on()`的事件代理模式),可以显著提高性能。同时,避免不必要的DOM遍历和选择器的过度使用。 ### 10. 学习资源 jQuery中文API文档...

    IE11下使用canvas.toDataURL报SecurityError错误的解决方法

    可以通过发送一个XMLHttpRequest(或使用fetch API,但IE11不支持)请求图片的二进制数据,然后将这个二进制数据转化为base64编码,最后设置为图片元素的src。这样,图片不再被视为跨域资源,因为在本地已经拥有其...

    javascript获取浏览器临时目录

    2. **ActiveXObject**:这是一个在Internet Explorer中可用的对象,可以用来调用Windows API和访问本地文件系统。需要注意的是,这种方法仅限于IE浏览器,并且存在一定的安全风险。 3. **注册表读取**:可以通过读取...

    HTML5新特性-离线功能应用.pdf

    开发者可以通过创建`cachemanifest`文件,结合`navigator.onLine`等API,以及利用DOM Storage和IndexedDB来实现离线状态下的应用功能。这样的技术进步显著提升了Web应用的可访问性和用户体验,尤其是在网络环境不...

Global site tag (gtag.js) - Google Analytics