Entwickler-Ecke

Windows API - wie kann ich cookies löschen?


Murmel - Mi 22.01.03 14:08
Titel: wie kann ich cookies löschen?
wie kann ich cookies löschen?


Anonymous - Mi 22.01.03 16:05

Ist das eine Delphifrage?


matze - Mi 22.01.03 17:27

du willst doch bestimmt wissen, wie du mit deinem Delphi Prog die cookies löschen kanst oder ??

Wenn ja: dann drück dich doch bitte da nächste mal besser aus !!


Delete - Mi 22.01.03 20:22

Warum beantwortet ihr nicht einfach die Frage unter beiden Aspekten.

1. Es ist keine Delphi-Frage, dann: Kekse muss man nicht löschen; Kekse brennen normalerweise nicht.

2. Es ist eine Delphi-Frage, dann sind wahrscheinlich die IE-Cookies gemeint? In dem Fall teilt sich die Frage wieder auf:

a) du hast den IE6: es ist kein Delphi-Programm nötig
b) du hast den IE6 nicht: du schreibst ein Programm, das den Cache einliest respektive löscht (FindFirstURLCacheEntry, und Co.; zu Typen usw. s. PSDK) und dann evtl. noch den Cookies-Ordner löscht. Bei letzterem aber die Datei "index.dat" in Ruhe lassen. Typischerweise haben IE-Cookies die Endung ".txt", so dass man mit FindFirst/FindNext recht einfach arbeiten kann.


littlemike1005 - Mi 22.01.03 21:45

den code habe ich auch mal irgendwann irgendwo gefunden.

du brauchst: - checklistbox1
- button1
- button2

auf deinem form.




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:
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:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, CheckLst,wininet;



type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    CheckListBox1: TCheckListBox;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  icei     : PINTERNETCACHEENTRYINFO;
  dwSize   : DWord;
  hSearch  : DWord;
begin
  CheckListBox1.Items.BeginUpdate;
  CheckListBox1.Items.Clear;
  dwSize  := 65536;
  icei    := AllocMem(dwSize);
  try
    hSearch := FindFirstURLCacheEntry('cookie:',icei^,dwSize);
    if hSearch = 0 then
    begin
      ShowMessage(SysErrorMessage(GetLastError)+' '+IntToStr(dwSize));
      exit;
    end;
    while hSearch <> 0 do
    begin
      Application.ProcessMessages;
      CheckListBox1.Items.Add(icei^.lpszSourceUrlName);
      dwSize := 65536;
      if not FindNextURLCacheEntry(hSearch,icei^,dwSize) then
      begin
        hSearch := 0;
      end;
    end;
  finally
    FreeMem(icei,65536);
    CheckListBox1.Items.EndUpdate;
  end;


end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i : integer;
begin
  for i := 0 to CheckListBox1.Items.Count-1 do
  begin
    if CheckListBox1.Checked[i] then
    begin
      DeleteURLCacheEntry(PChar(CheckListBox1.Items[i]));
    end;
  end;
  Button1.Click;

end;

end.


Tino - Do 23.01.03 10:18

Na ja, da es sich hier um ein Delphi-Forum handelt braucht mann sich die Frage ob es sich um eine Delphifrage handelt eingentlich nicht stellen.

Gruß
TINO


Delete - Do 23.01.03 10:53

@littlemike1005: Kracht es nicht bei der Schleife zum Löschen?
Du läßt die Schleife laufen von 0 bis Count-1. Das ist sagen wir 0 bis 9. Dann löscht du einen Eintrag. Es sind nur noch 9 Einträge da, aber die Schleife will bis zur ursprünglichen Anzahl laufen und das sind 10.

Besser wäre:

Quelltext
1:
for i := ChechListbox1.Items.Count-1 downto 0                    


Jetzt fängt er von Hinten an und wenn er jetzt einen Item rauslöscht sollte nicht passieren.


Brueggendiek - Do 23.01.03 11:39

Hallo!

Luckie hat folgendes geschrieben:
@littlemike1005: Kracht es nicht bei der Schleife zum Löschen?

Leider weiß ich nicht, was "DeleteURLCacheEntry" genau ist (bei Delphi 5 Standard ist es nicht deklariert), vom Aufruf her (Pchar) handelt es sich aber um eine Windows-API-Funktion. Die löscht (von der Fragestellung her gesehen) wohl eine Datei im IE-Cache, aber mit Sicherheit nicht den Eintrag in der CheckListBox, so daß die Anzahl der Einträge darin konstant bleibt.
Zugegebenermaßen ist es ein häufiger Fehler, in einer Delphi-Liste die Einträge von 0 bis Anzahl-1 zu löschen. Dann sollte man aus Performancegründen von hinten löschen, kann aber auch solange das erste Element löschen, bis die Liste leer ist.

Gruß

Dietmar Brüggendiek


Delete - Do 23.01.03 11:43

Stimmt, habe ich übersehen. Da wird ja gar kein Eintrag gelöscht. Ich habe nur for 0 to Count-1 und Delete... gesehen und da haben bei mir gleich die Alarmglöckchen geschrillt. :roll:


littlemike1005 - Do 23.01.03 15:16

@Luckie wie du siehst kracht es nicht. habe den code übernommen und er funzt.


Anonymous - Do 23.01.03 16:09

Tino hat folgendes geschrieben:
Na ja, da es sich hier um ein Delphi-Forum handelt braucht mann sich die Frage ob es sich um eine Delphifrage handelt eingentlich nicht stellen.


Nun ja, es gibt ja auch sowas wie OffTopic Fragen. Da ich dafür keine fertige Antwort habe, d.h. ich müßte etwas neues schreiben, hätte ich vorher gerne gewust ob ich die 20 Minuten nicht umsonst investiere.

Eine kleine Rückfrage darf doch erlaubt sein.


Tino - Do 23.01.03 16:39

Popov hat folgendes geschrieben:
Eine kleine Rückfrage darf doch erlaubt sein.

Natürlich!!! :D


Delete - Do 23.01.03 17:42

littlemike1005 hat folgendes geschrieben:
@Luckie wie du siehst kracht es nicht. habe den code übernommen und er funzt.

Ich sagte doch, dass ich was übersehen, habe, dass keien Items gelöscht werden.