转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
通过API访问IE Cache         ★★★★

通过API访问IE Cache

作者:闵涛 文章来源:闵涛的学习笔记 点击数:829 更新时间:2009/4/23 18:39:51

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


[Delphi程序]FAQ:如何从URL取得其在Internet Cache中的文件名  [Web开发]Check if a File is in Internet Explorers Cache
[Web开发][我的ASP.net学习历程]Cache和DateTime  [SyBase]使用dbcc memusage确定procedure cache size大小
[SyBase]dbcc memusage确定Procedure Cache Size  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台