Autor Beitrag
maxk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Di 28.10.03 22:19 
focus hat folgendes geschrieben:
Und bei mir fängt er das neu Scannen an wenn ich auf fertigstellen klicke. :shock:
Ja das meine ich mit Übernehmen, nachdem ändern, schaut er, ob sich noch etwas ergeben hat. Hat seine Richtigkeit. :D
Internetverknüpfungen (*.URL) werden nur auf Richtigkeit des Protokolls geprüft - sprich ob Windows weiß, welches Programm http:// öffnet.
Uninstallverknüpfungen A und B vollkommen identisch? Wenn nein, ist alles OK.
Fertigstellen werde ich noch umbenennen.

Ich habe mich nun für TCheckListBox entschieden. Da TTreeView keine Checkboxen anbietet - oder?

PS: Version 2.2 online

  • Schaut auch ob die Icons existieren
  • Kopiert Icons von Wechsellaufwerken auf die Platte
  • Erkennt Verknüpfungen auf Wechsellaufwerken
  • Kontextmenüs und Checkboxen 8)

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 29.10.03 09:57 
maxk hat folgendes geschrieben:
Uninstallverknüpfungen A und B vollkommen identisch? Wenn nein, ist alles OK.

a) Selbstverständlich sind beide Verknüpfungen identisch, sonst würde mein Programm das doch nicht erkennen. b) Du erhebst doch mit deinem Programm den Anspruch, Uninstall-Verknüpfungen zu finden. Und es gibt nachweislich einen NSIS-Uninstall-Link im Startmenü und in der Systemsteuerung. Und der Befehl ist in beiden Fällen der gleiche, es gibt keinen Unterschied - wie ich schon sagte.

Zitat:
Ich habe mich nun für TCheckListBox entschieden. Da TTreeView keine Checkboxen anbietet - oder?

Von dem API her kann man einen Tree-View auch mit Checkboxen ausstatten, aber wozu wolltest du den eigentlich nehmen? Ich finde eine listenartige Übersicht besser. Die Check-Listbox oder bspw. auch eine List-View mit Checkboxen ist IMHO eine sehr gute Wahl. Wozu ein Baum? Aha, ich sehe schon:
focus hat folgendes geschrieben:
RootNodes könnten dann z.b. deine Items aus der ComboBox sein

Das heißt, die gefundenen Probleme werden also unter den jeweils empfohlenen Aktionen angeordnet. Schön und gut, aber dann müsste es einen leeren Knoten "behalten" geben, und man müsste (der Einfachheit halber!) die Items per Drag&Drop verschieben können, wenn man sie bspw. behalten möchte.
Wie gesagt, die Listenansicht zum Auswählen via Checkbox ist einfacher.

maxk hat folgendes geschrieben:
Schaut auch ob die Icons existieren

Problem: "Geplante Tasks" (Win 98) hat angeblich ein nicht existierendes Symbol. Bei mir gibt´s aber sowohl Icon als auch die DLL, in der es steckt. Vielleicht solltest du auf diese (IMHO überflüssige) Prüfung verzichten?

Zitat:
Kopiert Icons von Wechsellaufwerken auf die Platte

Wozu soll´n das gut sein?

Zitat:
Erkennt Verknüpfungen auf Wechsellaufwerken

Auf Disketten: Ja. Auf CDs, bzw. im Netzwerk: Nein. ;) Und sag jetzt nicht, die letzten beiden sind keine Wechseldatenträger bzw. "permanente Ziele".


PS:
StartMenuCleaner.exe hat folgendes geschrieben:
Herzlich Willkommen beim
StartMenuCleaner - Das Original

:mrgreen: Ich habe nie abgestritten, dass die Anregung für mein Tool von dir ist.


Zuletzt bearbeitet von MathiasSimmack am Mi 29.10.03 13:54, insgesamt 1-mal bearbeitet
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 29.10.03 10:31 
PS: Die Sache mit den Datenträgern (Floppy, CD, Netzwerk, ...) kannst du relativ simpel prüfen. Ich poste mal einen Auszug aus meiner Scan-Funktion.
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:
// "GetLinkDestination" wirst du in ähnlicher Form haben.
// Diese Funktion liefert mir das Ziel der Verknüpfung.
// Aber in "lnkraw" steckt das Ziel auch noch im RAW-Format,
// und "lnkarg" enthält evtl. Parameter
lnk      := GetLinkDestination(ds.cFileName,lnkraw,lnkarg);

// Bevor der Einwand kommt: die API-Funktion, die hinter
// meinem "fileexists" steht, erlaubt auch das Prüfen von
// Ordnern.
fFound   := (lnk <> ''and (fileexists(lnk));

// Wenn das Verknüpfungsziel nun nicht gefunden wurde, ...
if(not fFound) or
// ... oder wenn die LNK-Datei eine Größe von 0 Bytes hat
  (ds.nFileSizeLow = 0then
begin
  // schauen, ob das Ziel auf einem Wechseldatenträger
  // liegt
  if(not fFound) and
    (GetDriveType(pchar(ExtractFileDrive(lnk) + '\'))
  // unterstützt werden Floppies, Netzlaufwerke und CD-Medien
      in[DRIVE_REMOVABLE,DRIVE_REMOTE,DRIVE_CDROM]) then
  // in dem Fall die nicht vorhandene Verknüpfung als
  // mögliches Problem melden (es ist ja keins mehr, wenn
  // bspw. die richtige CD im Laufwerk liegt)
    LV_ItemInsert(loop,path + '\' + ds.cFileName,
      'nicht verfügbarer Wechseldatenträger')

  // Nein, es ist keine Verknüpfung auf einem Wechsellaufwerk,
  // darum einfach nur das Problem anzeigen
  else
    LV_ItemInsert(loop,path + '\' + ds.cFileName,
      szProblemArray[ds.nFileSizeLow=0]);


  // "szProblemArray" ist ein bool-Array mit den beiden
  // möglichen Fehlern (nicht gefunden, bzw. 0-Byte-Datei).
  // Auf die Weise spare ich mir ein "if"

  // const
  //   szProblemArray   : array[boolean]of string =
  //     ('toter Link','0-Byte-Datei');

end;

Die eigentlich wichtige Funktion GetDriveType ist eine API-Funktion und sollte sich problemlos in dein Programm übernehmen lassen.

Gruß.
maxk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Mi 29.10.03 21:43 
:lol: Da war wirklich ein Fehler beim Uninstallfinden - Sorry.
Zitat:
Problem: "Geplante Tasks" (Win 98) hat angeblich ein nicht existierendes Symbol. Bei mir gibt´s aber sowohl Icon als auch die DLL, in der es steckt. Vielleicht solltest du auf diese (IMHO überflüssige) Prüfung verzichten?
Könntest du das vielleicht ein bisschen genauer erläutern? Ich habe auch unter W98 (vmWare) keine Probleme... PS: Was heißt "IMHO"?
Zitat:
Zitat:
Kopiert Icons von Wechsellaufwerken auf die Platte
Wozu soll´n das gut sein?
Wenn Windows die Gruppe öffnet sucht es nach den Icons. A) Die Diskette ist nicht eingelegt -> Windows findet kein Icon. B) Die Diskette ist zu langsam -> Windows braucht ewig zum öffnen der Gruppe.
Ich benutze GetDriveType bereits if not (GetDriveType in [DRIVE_FIXED,0,1) then ....

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 29.10.03 23:41 
Das Problem (wenn´s ein ist) dürfte sein, dass das Icon aus der "mstask.dll" stammt, die DLL aber ohne Pfad als Icondatei angegeben ist. Windows selbst hat kein Problem damit, da es sein eigenes und das Systemverzeichnis ja kennt.
Aber dein Programm kann nichts damit anfangen und ist offensichtlich der Meinung, die DLL existiert nicht. Darum die fälschliche Meldung, das Icon existiert nicht.

Abhilfe: "FileSearch" (s. Hilfe). Du könntest bspw. das Windows- und das Systemverzeichnis, sowie den kompletten Inhalt von "PATH" als Suchliste übergeben. (Jeweils durch Semikolon getrennt.) Der erste Parameter ist der Dateiname, auf den du es abgesehen hast. Rückgabe ist Name inkl. Pfad, wenn die Datei irgendwo in einem Ordner aus der Suchliste (Windows+System+PATH) gefunden wurde.

Zitat:
Ich benutze GetDriveType bereits if not (GetDriveType in [DRIVE_FIXED,0,1) then ....

Warum Null und Eins? Warum benutzt du nicht die Konstanten, mit denen du auch nach Monaten noch was anfangen kannst? :)
focus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187

XP, 2k, 98, Me
D6 Prof
BeitragVerfasst: Do 30.10.03 09:44 
Zitat:

Ja das meine ich mit Übernehmen, nachdem ändern, schaut er, ob sich noch etwas ergeben hat. Hat seine Richtigkeit. :D


Ich will dir ja echt nicht auf den Zeiger gehen aber nachdem ich zehnmal auf fertigstellen geklickt hab wird er ja wohl hoffentlich nichtsmehr finden oder? Ansonsten würde ich meine Programmstrategie nochmal überdenken...
Gruss
Michael
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 30.10.03 12:39 
Mache ich aber genauso, @focus. Es kann ja sein, dass sich durch das Beheben eines Problems ein anderes ergeben hat. Ich habe bspw. spaßeshalber eine Verknüpfung erstellt und das Ziel (war eine Kopie von Notepad in einem anderen Ordner) gelöscht.

Folglich hat mein Programm den toten Link gefunden. Ich habe ihn aber nicht löschen lassen, sondern ich habe die Dialogbox von Windows aufgerufen, mit der du nach dem Verknüpfungsziel suchen lassen kannst (@maxk: s. "IShellLink.Resolve" ;)). Das originale Notepad im Windows-Ordner wurde gefunden und als passendes Ziel vorgeschlagen.

Und nach dem erneuten Scan (nach der Reparatur!) fand das Tool dann auch zwangsläufig zwei identische Verknüpfungen. Logisch, die verwiesen ja nun beide auf das Notepad im Windows-Ordner.

Insofern halte ich ein erneutes Scannen durchaus für sinnvoll. Es sollte bei max aber auch eine deutlich sichtbare Möglichkeit geben, das Programm abzubrechen. Der X-Knopf in der Titelleiste macht das zwar, fällt aber kaum auf. Ein deutliches "Abbrechen" o.ä. wäre IMHO besser.
maxk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Do 30.10.03 19:27 
Ja, die Idee mit Resolve hatte ich auch schon. Mit FileSearch(,GetEnvironmentVariable('Path')); habe ich auch schon gearbeitet, weiß der Treufel, warum ich dann doch FileExists genommen habe...

PS: Ich lade am Wochenende eine neue Version hoch.
PPS: Ich habe schon einmal gefragt, was IMHO heißt :roll:

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
mirage228
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 338

Win 7 Prof.
Delphi 2005 Prof., Delphi 2010 Prof.
BeitragVerfasst: Do 30.10.03 22:54 
Hi maxk,

IMHO heist In My Humble Opinion - Meiner bescheidenen Meinung nach

mfG
mirage228

_________________
May the source be with you, stranger.
maxk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Fr 31.10.03 21:39 
:arrow: Ich danke vielmals!

Version 2.2 R2 hochgeladen.

  • Der Fertigstellen Knopf heißt jetzt Los geht's...
  • Tote Links werden gesucht (Resolve).
  • Die Suchroutinen für Links/Icons arbeiten mit FileSearch.

Das sind die auffäligsten Änderungen!

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 14.11.03 11:32 
Bei mir gibt´s übrigens meinen SMC + Quellcode.
Interessiert´s wen? ;)
mirage228
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 338

Win 7 Prof.
Delphi 2005 Prof., Delphi 2010 Prof.
BeitragVerfasst: Fr 14.11.03 15:01 
[OT]Immer diese Leute, die Schleichwerbung machen :D[/OT]

_________________
May the source be with you, stranger.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 14.11.03 18:56 
Na ja, :oops:, auf Grund der Ähnlichkeit zum Tool von maxk wollte ich es nicht direkt anpreisen. Obwohl mich die ein oder andere Meinung durchaus interessieren würde. ;)
maxk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Fr 14.11.03 19:31 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
//
// Start Menu Cleaner
// inspired by maxk's "Start Menu Cleaner"
// (http://www.delphi-forum.de/viewtopic.php?t=17757)
// (c) 2003, Mathias Simmack
//
Ich danke vielmals :angel:

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Chatfix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1583
Erhaltene Danke: 10

Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
BeitragVerfasst: Fr 06.02.04 13:34 
Also wenn man auf den Info-Button klickt (ganz am anfang) kommt man da nicht wieder raus...

Dann ist das Fenster extrem zu klein, oder du baust eine vertikale scrollleiste ein (ich kann die pfadangaben net lesen)

_________________
Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
j-a-n@gmx.de
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84


Delphi 7
BeitragVerfasst: Di 25.01.05 10:55 
Titel: target.lnk
noch was:

Zieh mal einen Ordner vom Explorer ins Startmenü.
Windows erstellt keine Verknüpfung sondern irgendwas spezielles, sodasss der Order im Startmenü aufgeklappt wird.
Das könntest Du deinem Programm noch beibringen.

_________________
--
Dieses Werk ist unter einer Creative Commons 3.0 Lizenz lizenziert und darf unter Namensnennung kopiert, weitergegeben, veröffentlicht und verändert werden.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 25.01.05 11:38 
Was soll Max dem Programm beibringen? Solche Ordner anzulegen? Ich weiß nicht, immerhin soll der Cleaner das Startmenü ja von unnützen Dingen befreien. Aber wenn dich das Verfahren interessiert, bitte schön: klick. :)
j-a-n@gmx.de
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84


Delphi 7
BeitragVerfasst: Di 25.01.05 11:47 
MathiasSimmack hat folgendes geschrieben:
Was soll Max dem Programm beibringen? Solche Ordner anzulegen? Ich weiß nicht, immerhin soll der Cleaner das Startmenü ja von unnützen Dingen befreien.

ne.. natürlich nicht. obwohl das auch ein schönes programm wäre... ;-)
Max' programm erkennt nur die targed.lnk und will die verschieben und damit den ordner zerstören. das sollte er natürlich nicht tun.

MathiasSimmack hat folgendes geschrieben:

Aber wenn dich das Verfahren interessiert, bitte schön: klick. :)

gibts dazu auch nen fertiges programm?

_________________
--
Dieses Werk ist unter einer Creative Commons 3.0 Lizenz lizenziert und darf unter Namensnennung kopiert, weitergegeben, veröffentlicht und verändert werden.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 25.01.05 12:05 
j-a-n@gmx.de hat folgendes geschrieben:
Max' programm erkennt nur die targed.lnk und will die verschieben und damit den ordner zerstören. das sollte er natürlich nicht tun.

Oh, da muss ich doch glatt mal gucken ob meiner cleverer ist. :)

Zitat:
gibts dazu auch nen fertiges programm?

Was willst du denn machen? Ein Programm zum Erstellen solcher Verknüpfungen? Schreib´s doch selbst. Du brauchst doch nur die paar Quellcodezeilen in dein Programm einbinden. ;)
maxk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: Di 25.01.05 12:15 
Titel: Re: target.lnk
j-a-n@gmx.de hat folgendes geschrieben:
Zieh mal einen Ordner vom Explorer ins Startmenü.
Windows erstellt keine Verknüpfung sondern irgendwas spezielles, sodasss der Order im Startmenü aufgeklappt wird.
Ich habe es jetzt an 3 Rechner versucht und irgendwo funktioniert da was nicht so richtig. Vielleicht könntest du mir da einfach mal einen "Link" auf C:\Test erstellen und mir dein Startmenü mailen - Danke!

_________________
Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.