Autor Beitrag
Jakane
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: 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 :(

ausblenden volle Höhe Delphi-Quelltext
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), 0nil);
  // IE-BackUp löschen
  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 user profile iconMartok: Code- durch Delphi-Tags ersetzt
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
// Deine Funktion
HANDLE FindFirstUrlCacheEntry( 
  LPCTSTR lpszUrlSearchPattern,
  LPINTERNET_CACHE_ENTRY_INFO lpFirstCacheEntryInfo,
  LPDWORD lpdwFirstCacheEntryInfoBufferSize
);

// Vorgeschlagene Funktion
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: 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

user profile iconthepaine91 hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
// Deine Funktion
HANDLE FindFirstUrlCacheEntry(LPCTSTR lpszUrlSearchPattern, LPINTERNET_CACHE_ENTRY_INFO lpFirstCacheEntryInfo, LPDWORD lpdwFirstCacheEntryInfoBufferSize);

// Vorgeschlagene Funktion
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Fr 08.02.13 15:51 
Kleine Änderung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
      repeat
        ShowMessage(Format('URL: %s%sLocalFilename: %s',
          [lpEntryInfo^.lpszSourceUrlName, sLineBreak, lpEntryInfo^.lpszLocalFileName]));
        //DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName);

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: Fr 08.02.13 16:23 
user profile iconWasWeißDennIch hat folgendes geschrieben Zum zitierten Posting springen:
Kleine Änderung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
      repeat
        ShowMessage(Format('URL: %s%sLocalFilename: %s',
          [lpEntryInfo^.lpszSourceUrlName, sLineBreak, lpEntryInfo^.lpszLocalFileName]));
        //DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName);

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]


Mit so einem Hinweis kann ich wirklich was anfangen, Danke.
Schwere Geburt :D
WasWeißDennIch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 653
Erhaltene Danke: 160



BeitragVerfasst: Fr 08.02.13 16:50 
user profile iconJakane hat folgendes geschrieben Zum zitierten Posting springen:
Schwere Geburt :D

Das kannst Du laut sagen :)