Gebraucht wird für das Beispiel eine TListView im Reportmodus mit 6 Spalten (URL, lokal, LastAccess, Expired, LastModified, Hitrate). Hier der Code zur Ansicht und evtl. Verbesserung:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100:
| uses WinInet;
// am besten als private Prozedur deklarieren procedure TDeineForm.LoadURLCache(ClearIt:boolean=FALSE); var bFool : boolean; res : integer; ds : PInternetCacheEntryInfo; lenDS : cardinal; li : TListItem; sysT : TSystemTime; begin lv1.Items.Clear; // TListview leeren, lv1.Items.BeginUpdate; // & Bildschirmausgabe blockieren
lenDS := sizeof(TInternetCacheEntryInfo); GetMem(ds,lenDS); try fillchar(ds^,lenDS,0);
// den 1. Eintrag im Cache suchen res := 0; while(res = 0) do begin res := FindFirstURLCacheEntry(nil,ds^,lenDS); if(res = 0) then case GetLastError of ERROR_INSUFFICIENT_BUFFER: begin FreeMem(ds); GetMem(ds,lenDS); fillchar(ds^,lenDS,0); end; else break; end; end;
bFool := true;
// durch den Cache loopen if(res <> 0) then while(true) do begin if(bFool) then if(ClearIt) then DeleteURLCacheEntry(ds^.lpszSourceUrlName) else begin // URL und lokalen Daeinamen anzeigen li := lv1.Items.Add; li.Caption := ds^.lpszSourceUrlName; li.SubItems.Add(ds^.lpszLocalFileName);
// LastAccess, Expired, & LastModified anzeigen if(FileTimeToSystemTime(ds^.LastAccessTime,sysT)) then try li.SubItems.Add(FormatDateTime('dd.mm.yyyy hh:nn',SystemTimeToDateTime(sysT))); except li.SubItems.Add('unbekannt'); end else li.SubItems.Add('unbekannt'); if(FileTimeToSystemTime(ds^.ExpireTime,sysT)) then try li.SubItems.Add(FormatDateTime('dd.mm.yyyy hh:nn',SystemTimeToDateTime(sysT))); except li.SubItems.Add('unbekannt'); end else li.SubItems.Add('unbekannt'); if(FileTimeToSystemTime(ds^.LastModifiedTime,sysT)) then try li.SubItems.Add(FormatDateTime('dd.mm.yyyy hh:nn',SystemTimeToDateTime(sysT))); except li.SubItems.Add('unbekannt'); end else li.SubItems.Add('unbekannt');
// Hitrate anzeigen li.SubItems.Add(inttostr(ds^.dwHitRate)); end;
bFool := FindNextURLCacheEntry(res,ds^,lenDS);
if(not(bFool)) then case GetLastError of ERROR_INSUFFICIENT_BUFFER: begin FreeMem(ds); GetMem(ds,lenDS); fillchar(ds^,lenDS,0); end; else break; end; end;
FindCloseURLCache(res); finally FreeMem(ds); end;
lv1.Items.EndUpdate; end; |
Ruft man die Funktion auf und setzt den Parameter "ClearIt" auf TRUE, löscht man den ganzen Cache, ansonsten werden die herausgezogenen Daten in der ListView angezeigt. Im Großen und ganzen sind das also die gecachten Dateien (HTMLs, Pics usw.), mit folgenden Sonderfällen:
Quelltext
1: 2: 3:
| Visited:??? = Verlauf Cookie:??? = Cookie frontpage:??? = Frontpage-Vorschau |
Will man jetzt gezielt nur einen Eintrag aus dem Cache löschen, braucht man die Funktion
DeleteURLCacheEntry, die auch schon in der Scanroutine oben verwendet wurde. Und der übergibt man den Namen der URL,
nicht den Namen der lokalen Datei - auch wenn sich das vielleicht paradox anhört. Da diese URL als Caption eines ListView-Eintrags benutzt wird, sollte es aber keine Probleme verursachen.
Ich empfehle einen Blick ins MSDN/PSDK, falls es mit den Funktionen Schwierigkeiten gibt. Die Delphi-WinAPI-Hilfe dürfte sich zu diesem Thema wohl ausschweigen.