Autor |
Beitrag |
Jakane
Beiträge: 257
|
Verfasst: Do 07.02.13 16:56
Hallo liebe Delphi-Helfer
ich habe diesen Code gefunden, der den gesamten IE-Cache löscht.
Irgendeiner hat gesagt das man den so umbauen kann, dass nur eine Datei gelöscht wird, nämlich die die ich suche.
Kann mir einer sagen wie das geht? ich versteh die Funktion nämlich leider nicht
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:
| procedure TfmHaupt.Update1Click(Sender: TObject); var Datei, Ziel : String; begin Datei:= 'http://www.anonym.de/Onlinehilfe/Version.txt'; Ziel:= ExtractFilePath(ParamStr(0)) + 'Version.txt'; UrlDownloadToFile(nil, PChar(Datei), PChar(Ziel), 0, nil); FuP_S._IECache_Clear(Datei); end;
procedure TFuP_S._IECache_Clear(Datei : String = ''); var lpEntryInfo: PInternetCacheEntryInfo; hCacheDir: LongWord; dwEntrySize: LongWord; begin if Datei <> '' then begin
end else begin dwEntrySize:= 0; FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize); GetMem(lpEntryInfo, dwEntrySize); if dwEntrySize > 0 then lpEntryInfo^.dwStructSize:= dwEntrySize; hCacheDir:= FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize); if hCacheDir <> 0 then begin repeat DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName); FreeMem(lpEntryInfo, dwEntrySize); dwEntrySize := 0; FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize); GetMem(lpEntryInfo, dwEntrySize); if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize; until not FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize); end; FreeMem(lpEntryInfo, dwEntrySize); FindCloseUrlCache(hCacheDir); end; end; |
Danke für Hilfen
Moderiert von Martok: Code- durch Delphi-Tags ersetzt
|
|
thepaine91
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Do 07.02.13 17:07
Laut MSDN müsste dir das weiterhelfen:
msdn.microsoft.com/e...ibrary/aa914159.aspx
Sofern dir der 1. Parameter bekannt ist.
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Do 07.02.13 17:08
Vor dem DeleteUrlCacheEntry-Aufruf kannst Du den aktuellen Eintrag ja noch untersuchen (z.B. auf die URL oder den lokalen Dateinamen). Näheres zu der Struktur findest Du unter http://msdn.microsoft.com/en-us/library/windows/desktop/aa385134%28v=vs.85%29.aspx
|
|
Jakane
Beiträge: 257
|
Verfasst: Fr 08.02.13 12:32
Tut mir leid ich versteh beide Hinweise nicht.
Das eine gibt mir, soweit ich das verstehe, eine Info zurück und das andere ist C++ und hat auch nix mit meiner Funktion zu tun
|
|
thepaine91
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Fr 08.02.13 12:44
Man merkt das du es nicht verstehst. C++ C# usw.. ist unerheblich die API ist die selbe.
Noch ein kleiner Hinweis:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| HANDLE FindFirstUrlCacheEntry( LPCTSTR lpszUrlSearchPattern, LPINTERNET_CACHE_ENTRY_INFO lpFirstCacheEntryInfo, LPDWORD lpdwFirstCacheEntryInfoBufferSize );
BOOL GetUrlCacheEntryInfo( LPCTSTR lpszUrlName, LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo, LPDWORD lpdwCacheEntryInfoBufferSize ); |
Jetzt vergleich mal beides miteinander und dann lese dir nochmal die verlinkte Doku durch. Anschließend solltest du den Unterschied und die Gemeinsamkeit sehen.
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Fr 08.02.13 12:48
Und wenn man C++ nicht (auch nicht nur lesend) versteht, kann man immer noch einen Blick in die WinInet.pas werfen, sofern man eine Delphi-Version mit Source besitzt. Da sind die Strukturen dann nach Pascal übersetzt, der Link war eigentlich nur dazu gedacht, die Bedeutung der einzelnen Felder erklären zu lassen.
|
|
Jakane
Beiträge: 257
|
Verfasst: Fr 08.02.13 13:54
So komm ich keinen Meter weiter
API.pas und Co kann ich nicht lesen, das ist für mich nur zusammengewürfelte Zahlen, Zeichen und Buchstaben wo ab und an mal ein bekannter Begriff wie "function" oder "Result" auftraucht
thepaine91 hat folgendes geschrieben : |
C#-Quelltext 1: 2: 3: 4: 5:
| HANDLE FindFirstUrlCacheEntry(LPCTSTR lpszUrlSearchPattern, LPINTERNET_CACHE_ENTRY_INFO lpFirstCacheEntryInfo, LPDWORD lpdwFirstCacheEntryInfoBufferSize);
BOOL GetUrlCacheEntryInfo(LPCTSTR lpszUrlName, LPINTERNET_CACHE_ENTRY_INFO lpCacheEntryInfo, LPDWORD lpdwCacheEntryInfoBufferSize); |
|
Rein vom Verstehen, sehen beide Funktionen für mich gleich aus, anhand der Bezichnung der Variablen vermute ich, dass das eine eine Info ausgibt und das andere die erste Datei im Irgendwo sucht.
Wie man das benutzt, erklärt mir das aber nicht, geschweige wie ich die Funktion nun ändern muss, damit die Datei aus dem Cache rausfliegt.
Könnte man das Rätzelraten damit beenden? Ohne das Löschen der Datei kann ich meine Exe nicht aktualisieren.
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Fr 08.02.13 14:53
Und nun? Sollen wir Dir C&P-Code schreiben? Im MSDN steht doch genau beschrieben, was die Funktionen tun und was die einzelnen Parameter bedeuten. Die passenden Dateitypen für Delphi sollte Dir zumindest die Codevervollständigung verraten, wenn Dir die C++-Typen nicht geläufig sind. Ein wenig mehr Eigeninitiative gehört zum Programmieren schon dazu, sry.
|
|
Jakane
Beiträge: 257
|
Verfasst: Fr 08.02.13 15:27
Ich sitzt jetzt insgesagt seit fast 6 Stunden an dem Problem.
Eigeninitiative hat nichts damit zu tun, dass ihr (Wobei nur "WasWeißDennIch") versucht einen Anfänger etwas beizubringen was für zumindest Fortgeschrittene da ist.
Foren, Codes, Tutorials haben mir nicht geholfen.
Ausprobieren hat nicht geholfen.
Selbst die Programmierer in der Firma wissen nicht weiter.
Und nun scheitets auch an Delphi-Helfern
Die Codevervollständigung hilft mir nicht weil mein Delphi bei der Funktion "GetUrlCacheEntryInfo(PChar(Datei), URLHISTORY_CACHE_ENTRY, 0);" einen Fehler auswirft:
[Fehler] xxx.pas(1572): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
oder
[Fehler] xxx.pas(1572): Konstantenausdruck verletzt untere Grenzen
Solche Fehler bekommt man bei String oder Integer nicht -.-
Und selbst wenn ich an der Hürde irgendwann vorbei kommen sollte, glaube ich nicht nicht dass ein Austausch zwischen
"FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize);"
und
"GetUrlCacheEntryInfo(PChar(Datei), ???, dwEntrySize);"
ausreicht damit meine Funktion dann funktioniert
Auch wenn es egoistisch klingen mag.
Ich brauch den Code oder eine richtige Führung.
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Fr 08.02.13 15:51
Kleine Änderung:
Delphi-Quelltext 1: 2: 3: 4:
| repeat ShowMessage(Format('URL: %s%sLocalFilename: %s', [lpEntryInfo^.lpszSourceUrlName, sLineBreak, lpEntryInfo^.lpszLocalFileName])); |
Jetzt könnte man diese Infos auswerten und nur, wenn sie den vorgegebenen Kriterien entsprechen, die DeleteUrlCacheEntry-Zeile ausführen.
[edit] C&P-Fehler, lpszSourceUrlName in lpszLocalFileName geändert [/edit]
|
|
Jakane
Beiträge: 257
|
Verfasst: Fr 08.02.13 16:23
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Fr 08.02.13 16:50
|
|
|