| Autor |
Beitrag |
nina
      
Beiträge: 62
|
Verfasst: Mi 05.02.03 09:23
Hallo Leute!
Hier bin ich wieder und das gleich mit zwei Fragen!!!!
Kann mir einer von Euch sagen wie ich den Verlauf löschen kann. Ich habe schon einiges probiert, aber das alles klappt nicht so wie ich es gerne hätte! Der Verlauf steht bei mir unter
C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Verlauf
Und dann würde ich auch noch gerne wissen, wie man die Auto-Complete Einträge löschen kann!!!
Danke schon mal im vorraus für Eure hilfe!!!
nina
|
|
Shadowdragon
      
Beiträge: 143
Win 2000
Delphi 6 Pers., Delphi 7
|
Verfasst: Mi 05.02.03 17:06
Also da gibt's 2 Wege, von denen ich weiss.
(1) Du schreibst das Ganze in QBASIC, und zwar so:
Quelltext 1: 2: 3:
| CLS KILL "C:\Dokumente und Einstellungen\Administrator\Lokale Einstellungen\Verlauf\*.*" END |
In Delphi gibt's den Befehl DeleteFile, der schaut dann so aus:
Quelltext 1: 2: 3:
| begin deletefile ('C:\buch\blabla.txt') ; end; |
Wie man damit aber den Inahlt eines gesamten Ordners löscht, weiss ich nicht, sorry...
wahrscheinlich kann einer der Profis hier weiterhelfen.
_________________ Ein Programm gleicht dem Prinzip von Jenga:
Viele Bestandteile, wird nach oben hin immer besser, nach unten hin immer instabiler und wenn man was falsch macht klappt der ganze Mist zusammen.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 07.02.03 20:26
| Shadowdragon hat folgendes geschrieben: | QBASIC ähm, was ist das ? Oder wer braucht das ?
Quelltext 1: 2: 3:
| begin deletefile ('C:\buch\blabla.txt') ; end; |
|
Ersetze blabla.txt durch *.*, der Pfad muß aber stimmen.
Gruß
Hansa
|
|
Shadowdragon
      
Beiträge: 143
Win 2000
Delphi 6 Pers., Delphi 7
|
Verfasst: Fr 07.02.03 20:44
QBASIC steht für QuickBASIC und ist ein DOS-Programmierprogramm, eines der einsteigerfreundlichsten
Ja, hansa, dachte ich auch, dem ist aber nicht so! Delphi muss irgend einen anderen Zeichencode für "alle Dateien" haben, denn ich habe es etliche male mit dem *.* ausprobiert, und das geht nicht! Bei QBASIC klappt das prima, aber bei Delphi nicht.
Und an meiner Version kann das ja schlecht liegen, schließlich hab ich Delphi 6 Personal ....... 
_________________ Ein Programm gleicht dem Prinzip von Jenga:
Viele Bestandteile, wird nach oben hin immer besser, nach unten hin immer instabiler und wenn man was falsch macht klappt der ganze Mist zusammen.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 07.02.03 21:35
| Shadowdragon hat folgendes geschrieben: | | ... Ja, hansa, dachte ich auch, dem ist aber nicht so! ..... |
Da scheinst Du Recht zu haben. Hier ist ein Grundgerüst für sowas, das funktioniert :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button1Click(Sender: TObject); begin deleteFile ('net.001'); deleteFile ('net.cfg'); IF NOT RemoveDir ('C:\a') THEN showmessage ('Verzeichnis XY konnte nicht gelöscht werden !'); end; |
Auf Anhieb verstehe ich das auch nicht (mehr).  Notfalls muß mit FINDFIRST, FINDNEXT eine Repeat - Schleife aufgebaut werden. Falls es dringend ist habe ich dazu ein Beispiel.
Gruß
Hansa
Korrektur: Im Verzeichnis C:\a sind nur diese zwei Dateien  Vor RemoveDir muß das leer sein!
|
|
Brueggendiek
      
Beiträge: 304
Win 98, Win98SE, Win XP Home
D5 Std
|
Verfasst: Fr 07.02.03 21:52
Hallo!
Da stimmt aber was nicht!
| hansa hat folgendes geschrieben: | Quelltext 1: 2: 3:
| begin deletefile ('C:\buch\blabla.txt') ; end; |
Ersetze blabla.txt durch *.*, der Pfad muß aber stimmen. |
DeleteFile kann nur eine Datei löschen!
Es wird wohl nichts anderes übrig bleiben, als mit FindFirst/FindNext/FindClose zu arbeiten und die Dateien einzeln zu löschen!
Gruß
Dietmar Brüggendiek
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Fr 07.02.03 22:00
Hi Brueggendiek,
auch schon aufgewacht?  Ich hab ja zumindest vor ner halben Stunde noch geschrieben wie das ganze restlos zu beseitigen ist.
Gruß
Hansa
|
|
Shadowdragon
      
Beiträge: 143
Win 2000
Delphi 6 Pers., Delphi 7
|
Verfasst: Fr 07.02.03 22:38
Ich hab das Ganze mal in QBASIC für dich geschrieben, funktioniert einwandfrei.....
wenn du's haben willst, mail mir mal, man darf hier ja keine Links posten.
Kriegst auch den Source dazu ^__^
_________________ Ein Programm gleicht dem Prinzip von Jenga:
Viele Bestandteile, wird nach oben hin immer besser, nach unten hin immer instabiler und wenn man was falsch macht klappt der ganze Mist zusammen.
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 08.02.03 09:37
| Brueggendiek hat folgendes geschrieben: | | Es wird wohl nichts anderes übrig bleiben, als mit FindFirst/FindNext/FindClose zu arbeiten und die Dateien einzeln zu löschen! |
Wie wär´s mit SHFILEOPERATION? Neben Kopieren und Verschieben lassen sich damit Dateien auch löschen. Mehrere Dateien, ganze Ordner ... inkl. Fortschrittsanzeige -wenn´s mal wieder länger dauert!- weil das ganze nämlich der Funktion aus dem Win-Explorer entspricht.
Beispiele müssten hier im Forum zu finden sein.
Auf jeden Fall fündig wird man im MSDN/PSDK.
|
|
nina 
      
Beiträge: 62
|
Verfasst: Mi 12.02.03 08:42
Hallo Leute,
danke für Eure Tipps. Ich werde sie im laufe des Tages mal ausprobieren und wenn es klappt dann meld ich mich und wenn nicht, dann meld ich mich ebenfalls!!!!
nina
|
|
nina 
      
Beiträge: 62
|
Verfasst: Do 13.02.03 14:32
Hallo Leute,
also ich habs jetzt gestern den ganzen Tag probiert und heute vormittag auch noch mal. Aber kein einziger Code funzt bei mir!!!! Ich werde den Code mal hier rein schreiben, vielleicht sieht ja einer von Euch den Fehler. Was ich vielleicht noch dazusagen sollte! Delphi compiliert zwar das Programm richtig, aber löschen tut er den Ordner "Verlauf" deswegen troztdem nich!!!
Unter implementation steht dieser Code:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| function DelDir(dir: string): Boolean; var fos: TSHFileOpStruct; begin ZeroMemory(@fos, SizeOf(fos)); with fos do begin wFunc := FO_DELETE; fFlags := FOF_SILENT or FOF_NOCONFIRMATION; pFrom := PChar(dir + #0); end; Result := (0 = ShFileOperation(fos)); end; |
Und unter dem Button "Löschen" steht dieser:
Delphi-Quelltext 1: 2: 3: 4:
| if history.Checked then begin DelDir('C:\Dokumente und Einstellungen\+"GetCurrentUserName"+\Lokale Einstellungen\Verlauf\'); end; |
Wäre Euch sehr dankbar wenn mir einer da draussen helfen könnte!!!!
nina
Moderiert von Tino: Code- durch Delphi-Tags ersetzt.
|
|
Brueggendiek
      
Beiträge: 304
Win 98, Win98SE, Win XP Home
D5 Std
|
Verfasst: Fr 14.02.03 06:20
Hallo Nina!
So wie ich das verstanden habe, muß SHFileOperation einen (oder mehrere) Dateinamen haben. "blabla\" ist aber ein Directorynamen!
Schreibe doch einfach man "blabla\*.*" - Versuch macht kluch!
Gruß
Dietmar Brüggendiek
|
|
nina 
      
Beiträge: 62
|
Verfasst: Fr 14.02.03 09:06
Hallo Dietmar,
danke für den Tipp. Im ersten Moment hat es auch geklappt, aber sobald ich wieder im Netz bin, sind alle Adressen wieder im Verlauf drin. Damit meine ich dann auch die Adressen vom Tag vorher, die ich ja kurz vorher gelöscht hatte.
Ich schätze mal, dass das an den index. dat liegt, denn die sind ja in diesem Moment nicht gelöscht. Ich bin auch gerade dabei herauszufinden wie das in Delphi funktioniert. Habe allerdings erst herausgefunden, dass man die index. dat wahrscheinlich in Windows nur im DOS löschen kann.
Wenn irgendjemand mehr dazu weiss, dann postet es mir bitte!!!!
Danke
nina
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 14.02.03 11:27
| Brueggendiek hat folgendes geschrieben: | | So wie ich das verstanden habe, muß SHFileOperation einen (oder mehrere) Dateinamen haben. "blabla\" ist aber ein Directorynamen! |
Nein. Es können auch Ordnernamen sein. Dass die Funktion einen Fehler verursacht, liegt IMHO am Backslash am Ende. Bei jedem anderen Ordner geht´s simpel mit
Delphi-Quelltext 1:
| DelDir('C:\OrdnerName'); |
bspw.
Zum Löschen des Verlaufs braucht man aber was anderes. ´s wundert mich, dass sich DaFox noch nicht zu Wort gemeldet hat. (@Markus:  ). Folgender Tipp stammt von ihm und funktioniert sehr gut.
Die Warnung zuerst:
Wer ohne die VCL arbeitet, sollte unbedingt die Unit "ActiveX" zusätzlich einbinden und im Hauptteil des Programms folgendes tun:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| begin CoInitialize(nil);
CoUnInitialize; end. |
Ohne dies gab´s bei mir einen saftigen Blue-Screen bzw. Fehlermeldungen beim Versuch, den Cache zu löschen. Bei der VCL ist zu 95% davon auszugehen, dass -insbesondere bei der Nutzung von solchen COM- u.ä. Routinen- die beiden o.g. Befehle durch eine andere Unit aufgerufen werden. Wer 100% sicher sein will, integriert diese beiden Befehle auch bei VCL-Projekten in seine Unit. Anbieten würde sich dazu der initialization/ finalization-Teil.
Nun aber:
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:
| uses ComObj;
type STATURL = record cbSize: DWORD; pwcsUrl: DWORD; pwcsTitle: DWORD; ftLastVisited: FILETIME; ftLastUpdated: FILETIME; ftExpires: FILETIME; dwFlags: DWORD; end;
IEnumSTATURL = interface(IUnknown) ['{3C374A42-BAE4-11CF-BF7D-00AA006946EE}'] function Next(celt: Integer; out elt; pceltFetched: PLongint): HRESULT; stdcall; function Skip(celt: Longint): HRESULT; stdcall; function Reset: HResult; stdcall; function Clone(out ppenum: IEnumSTATURL): HResult; stdcall; function SetFilter(poszFilter: PWideChar; dwFlags: DWORD): HResult; stdcall; end;
IUrlHistoryStg = interface(IUnknown) ['{3C374A41-BAE4-11CF-BF7D-00AA006946EE}'] function AddUrl(pocsUrl: PWideChar; pocsTitle: PWideChar; dwFlags: Integer): HResult; stdcall; function DeleteUrl(pocsUrl: PWideChar; dwFlags: Integer): HResult; stdcall; function QueryUrl(pocsUrl: PWideChar; dwFlags: Integer; var lpSTATURL: STATURL): HResult; stdcall; function BindToObject(pocsUrl: PWideChar; var riid: TIID; out ppvOut: Pointer): HResult; stdcall; function EnumUrls(out ppenum: IEnumSTATURL): HResult; stdcall; end;
IUrlHistoryStg2 = interface(IUrlHistoryStg) ['{AFA0DC11-C313-11D0-831A-00C04FD5AE38}'] function AddUrlAndNotify(pocsUrl: PWideChar; pocsTitle: PWideChar; dwFlags: Integer; fWriteHistory: Integer; var poctNotify: Pointer; const punkISFolder: IUnknown): HResult; stdcall; function ClearHistory: HResult; stdcall; end;
IUrlHistoryNotify = interface(IOleCommandTarget) ['{BC40BEC1-C493-11d0-831B-00C04FD5AE38}'] end;
procedure ClearIEHistory; const CLSID_CUrlHistory : TGUID = '{3C374A40-BAE4-11CF-BF7D-00AA006946EE}'; var ie : IUrlHistoryStg2; begin ie := CreateComObject(CLSID_CUrlHistory) as IUrlHistoryStg2; ie.ClearHistory; end; |
Einfach nur die Prozedur "ClearIEHistory" aufrufen, und das war´s.
Eure Dankesworte bitte an DaFox richten. 
|
|
DaFox
      
Beiträge: 189
|
Verfasst: Fr 14.02.03 20:43
| MathiasSimmack hat folgendes geschrieben: |
´s wundert mich, dass sich DaFox noch nicht zu Wort gemeldet hat. (@Markus: ).
|
Mache ich hiermit und bitte gleich um Verzeihung, dass ich momentan sehr selten hier anzutreffen bin. Stecke mitten im Prüfungsstress...
| MathiasSimmack hat folgendes geschrieben: |
Folgender Tipp stammt von ihm und funktioniert sehr gut.
|
Ehrlich? Ich kenne diesen Code zwar, weiß aber momentan nicht mehr wo bzw. dass ich diesen gepostet habe (Prüfungsstress, s.o.)
Na sowas, dass ich doch auch immer die Sourcecodes so freizügig unter die Leute bringe...
| MathiasSimmack hat folgendes geschrieben: |
Eure Dankesworte bitte an DaFox richten.
|
Nicht nötig, einfach alle Daumen halten für die Ana-Prüfung...
Gruß,
Markus
Nachtrag: @Mathias: EE? 
|
|
nina 
      
Beiträge: 62
|
Verfasst: Sa 15.02.03 12:58
Huhu!!!
Erst einmal danke an Euch alle die mir versucht haben zu helfe. Denn es hat jetzt endlich geklappt. Juhu
Ich habe gestern noch den Code vom Mathias (DaFox) ausprobiert und es hat geklappt. Endlich!!! Vielen Dank Euch beiden!!!
Erst dachte ich es würde schon wieder nicht funktionieren, weil er mir den heutigen Verlauf nicht gelöscht hat. Aber beim Versuch den Verlauf auf einem anderen Rechner zu löschen, war es genau das gleich, und somit bin ich mal der Meinung das er den heute Verlauf nicht gleich löscht.
Vielen Dank noch mal und bis bald, denn ich kann Euch versprechen, dass ich recht bald wieder posten werde. Wahscheinlich schon ab Montag! Also, macht Euch auf was gefasst!! Ich danke schon mal im vorraus!!!!
nina
P.S. DaFox, ich drücke Dir die Daumen für die Prüfung und wünsche Dir natürlich auch viel Glück dabei!!!
|
|
Andi1982
      
Beiträge: 497
WinXP HE
D6 Enterprise
|
Verfasst: So 02.11.03 19:35
Hallo,
habe gerade den Code von DaFox in mein Programm eingebaut, obwohl ich den absolut nicht vestehe, aber es löscht meinen Verlauf tatsächlich
Aber angenommen ich will aus meinem Verlauf nur eine URL löschen oder in meinem Fall den "Arbeitsplatz". Das geht doch bestimmt auch irgendwie mit dem Code, nur weiß ich nicht wo ich das anpacken muss
hat einer ne idee oder noch besser, weiß es jemand??
Gruß Andi
_________________ Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 03.11.03 09:57
Das Prinzip des o.g. Codes ist recht einfach: das Betriebssystem (allerdings erst ME, 2000 und höher) stellen ein Interface namens IUrlHistoryStg2 zur Verfügung. Dieses Interface besitzt die Funktion/Methode/nenn-es-wie-du-willst "ClearHistory", um die komplette IE-History zu löschen.
(So gibt es bspw. auch Interfaces zum Anlegen und Auslesen von Verknüpfungen = IShellLink)
Eine zweite Möglichkeit, gezielt URLs zu löschen, wäre das Interface IUrlHistoryStg (quasi ohne die 2 am Ende). Das ist ja auch in obigem Code enthalten. Die bietet die Methoden "EnumUrls" und "DeleteUrl" (auf die wirst du´s wohl abgesehen habe). Das Problem ist aber ebenfalls das Betriebssystem: Minimum sind der IE 5.5 und min. Win ME oder 2000.
Eine andere Möglichkeit, den Cache auszulesen und damit auch auf die Einträge im Verlauf zuzugreifen, wäre FINDFIRSTURLCACHEENTRY. Das Prinzip ähnelt FindFirst und funktioniert auch unter 9x und NT4.
|
|
Andi1982
      
Beiträge: 497
WinXP HE
D6 Enterprise
|
Verfasst: Mo 03.11.03 10:05
Vielen Dank,
hat mir sehr geholfen! Werde jetzt mal versuchen selbst was damit hinzubekommen. Kann aber sein dass ich mich schon bald wieder mit diesem Thema melde...
_________________ Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 03.11.03 10:53
Ich muss mich übrigens noch korrigieren. Die o.g. Interfaces funktionieren natürlich auch unter Win 9x. Wichtig ist nur, dass ein aktueller IE (min. 5.5) drauf ist.
@DaFox: Falls du mal wieder anwesend bist, wie sieht´s mit deiner geschätzten Meinung dazu aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type STATURL = record cbSize: DWORD; pwcsUrl: DWORD; pwcsTitle: DWORD; ftLastVisited: FILETIME; ftLastUpdated: FILETIME; ftExpires: FILETIME; dwFlags: DWORD; end; |
Laut PSDK müssten die beiden markierten Einträge eigentlich LPWSTR (also WideChars) sein.
|
|