Autor |
Beitrag |
JayK
      
Beiträge: 1013
|
Verfasst: Mo 01.01.07 22:34
Hey Leute!
HINWEIS: |
Seit Mitte 2007 warte ich dieses Programm und damit das Projekt nicht mehr aufgrund meines Umstieges auf Linux. Wenn jemand das Projekt übernehmen möchte, dann möge er das bitte tun - meinen Segen hat er. Bei Fragen stehe ich selbstverständlich zur Seite, sofern ich kann. |
Ich lass auch mal wieder von mir hören und stell jetzt mal ein Programm vor, an dem ich schon seit über einem Jahr sitze (mit Neuanfang vor nem Vierteljahr oder so) und wo ich bis jetzt von einer Veröffentlichung absah. Guckt es euch bitte mal an, wäre sehr dankbar
Startup Ace ist ein Autostartverwaltungstool. Nicht gleich wegklicken! Ich weiß, davon gibt's schon viele, aber dieses ist meiner Meinung nach kein gewöhnliches.
Klar, man kann die Autostarts im Run-Schlüssel und in den Autostartordnern ändern. Und dann gibt es bei meinem Werkzeug noch die Möglichkeit, die Einträge von Startup Ace selbst starten zu lassen. Dann werden sie aus den Windows eigenen Stellen rausgenommen und in den eigenen Schlüssel platziert. (Software/Microsoft/Windows/CurrentVersion/Run/Startup Ace)
Was bringts? Die Autostarts lassen sich verzögern (jedem wird eine Wartezeit zugeordnet, die vergeht, bevor das Programm ausgeführt wird), ansehen (auch beim Starten), überspringen, die ganze Startprozedur lässt sich pausieren und abbrechen (nur die Prozedur von Startup Ace, nicht die von Windows).
Das mit dem Verzögern sollte theoretisch den Prozessor etwas entlasten, wenn nicht alles auf einmal kommt, und man kann die weniger wichtigen Programme (z.B. Messenger) später starten lassen, als die absolut notwendigen (z.B. irgendwelche Interneteinwahlnetzwerkverbindewasweißichsoftware) und bei den Messengern kommt es in dem Fall auch nicht zu Müll bei der automatischen Anmeldung, wenn das Netzwerkverbinden generell länger dauern sollte ^^
Features:
- Bearbeiten von Autostarts
- Editieren von Pfaden und Argumenten
- Autostarts aktivieren und deaktivieren
- Autostarts umbenennen
- Autostarts zwischen allen Benutzern und nur dem momentanen Benutzer verschieben (dazu benötigt man wegen der Rechteverwaltung von Windows Administratorrechte)
- Autostarts löschen
- neue Autostarteinträge erstellen
- Verzögern von Autostarts
- Verzögerungen bis zu 86400 Sekunden möglich - aber wer will schon so lange auf seine Programme warten? ^^
- Programme auf das Vorhandensein bestimmter Prozesse warten lassen
- beim Starten von/für verzögerten Autostarts möglich:
- Abbruch des Autostartprozesses
- Überspringen einzelner Autostarts
- sofortiges Ausführen einzelner Autostarts
- Pausieren des Autostartprozesses
- Programmoberfläche
- Autostarts werden gleich in der Liste bearbeitet
- Oftmals kein Griff zur Maus notwendig, lässt sich größtenteils mit der Tastatur bedienen
- Verzögerte Autostarts können alle auf einmal um eine bestimmte Verzögerungszeit verändert werden („alle bitte 14 Sekunden später...”)
- Pfadangaben können mittels „Öffnen”-Dialog in Programmargumente eingefügt werden
[url= jayk.endofinternet.n...tartupace/scr07.jpg]Screenshot[/url]
Lizenz: GNU Lesser General Public License
Ist noch im Betastadium, also kann es noch sein, dass es paar Fehler gibt, aber die Registry düfte das Programm eigentlich nicht mehr zerschießen
Momentane Version: 0.7.21
2007-08-21
Download
jayk.endofinternet.n....php?file=startupace - ZIP-Datei mit der Exe und den anderen nötigen Dateien. Einfach entpacken und ausführen, Löschen durch Ordnerentfernen, wobei die vorgenommenen Veränderungen selbstverständlich NICHT zurückgenommen werden.
jayk.endofinternet.n...?file=startupace_src - Sourcecode. Delphi/Win32, zusätzliche Kompos: Virtual Treeview, ToolBar2000, TBX, SpTbxLib und damit auch die TNT Unicode Controls
Freue mich über jegliches Feedback
Schöne Grüße
Zuletzt bearbeitet von JayK am Sa 10.05.08 21:10, insgesamt 13-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 01.01.07 23:18
Ja, sieht gut aus, werd es mal eingehender testen.
Eins ist mir aber sofort aufgefallen: Du solltest nicht davon ausgehen, dass der Autostart-Eintrag auf jeden Fall gesetzt werden kann. Bei mir ist die Firewall angesprungen mit der Warnung, dass das Programm Änderungen vornimmt, damit es bei jedem Rechnerstart ausgeführt wird.
Und als ich spaßeshalber das mal nicht zugelassen habe, kam eine Zugriffsverletzung in deinem Programm...
Da es viele solcher Programme gibt, solltest du dann eine entsprechende Meldung ausgeben, dass das für das Programm essentiell wichtig ist mit einer kurzen Erklärung oder so.
Die andere Sache: Warum soll das Programm eigentlich sofort bei jedem Start ausgeführt werden, wenn ich noch gar kein Programm damit starten lasse (das war ja der erste Start des Programms)?
Wäre es nicht sinnvoller, wenn das Programm sich erst in den Autostart einträgt, wenn es auch tatsächlioch verwendet wird? Sonst verlangsamt das Programm ja unnötig den Rechnerstart, obwohl es gar nix macht...
Grundsätzlich jedenfalls: Schönes Programm. Sowas hatte ich auch mal geschrieben, aber nie wirklcih fertig geschrieben und veröffentlicht. Und das kann ich mir ja jetzt sparen  . Danke!
Dann ein weiterer Fehler:
Ich klicke auf einen Pfad, worauf der sofort editierbar wird. Jetzt klicke ich in die freie Fläche unterhalb der EInträge. Dann kommt folgende Meldung: Zitat: | Node must not be nil. (D:\Delphi\10TE\\Virtual TreeView\Source\VirtualTrees.pas, Zeile 24009) |
Dann noch ein Vorschlag für eine neue Funktion: Ich hatte in meinem unfertigen Programm zusätzlich zu einer Verzögerung auch noch die Option, dass ein Programm erst gestartet wird, wenn der PC nix mehr zu tun hat. Stichwort OnIdle! Das wäre finde ich sehr sinnvoll.
--> Die Ursache der Fehler sehe ich mir mal im Sourcecode an und poste die Stellen, wenn ich sie gefunden habe.
|
|
JayK 
      
Beiträge: 1013
|
Verfasst: Mo 01.01.07 23:33
jaenicke hat folgendes geschrieben: |
Da es viele solcher Programme gibt, solltest du dann eine entsprechende Meldung ausgeben, dass das für das Programm essentiell wichtig ist mit einer kurzen Erklärung oder so. |
Wird gemacht. Nur die Zugriffsverletzung kann ich mir auf Anhieb nicht erklären.
jaenicke hat folgendes geschrieben: | Die andere Sache: Warum soll das Programm eigentlich sofort bei jedem Start ausgeführt werden, wenn ich noch gar kein Programm damit starten lasse (das war ja der erste Start des Programms)?
Wäre es nicht sinnvoller, wenn das Programm sich erst in den Autostart einträgt, wenn es auch tatsächlioch verwendet wird? Sonst verlangsamt das Programm ja unnötig den Rechnerstart, obwohl es gar nix macht... |
Hast Recht. Solche Sachen hätte ich selbst als Autor nie bemerkt, man muss wirklich immer auch andere Leute draufgucken lassen ^^ ich seh mal, dass ich das ändere.
|Edit: wundere mich grad, warum ich das überhaupt so gemacht hatte
jaenicke hat folgendes geschrieben: | Dann ein weiterer Fehler:
Ich klicke auf einen Pfad, worauf der sofort editierbar wird. Jetzt klicke ich in die freie Fläche unterhalb der EInträge. Dann kommt folgende Meldung: Zitat: | Node must not be nil. (D:\Delphi\10TE\\Virtual TreeView\Source\VirtualTrees.pas, Zeile 24009) |
|
Meine Autostartliste ist so lang, dass ich garkeinen Platz unter meinen Einträgen hatte  Danke für den Hinweis.
jaenicke hat folgendes geschrieben: | Dann noch ein Vorschlag für eine neue Funktion: Ich hatte in meinem unfertigen Programm zusätzlich zu einer Verzögerung auch noch die Option, dass ein Programm erst gestartet wird, wenn der PC nix mehr zu tun hat. Stichwort OnIdle! Das wäre finde ich sehr sinnvoll. |
Joa interesant. Ich seh mir das mal an, sobald die Fehler, die du genannt hast, beseitigt sind. Auf sowas bin ich noch garnicht gekommen, siehste.
jaenicke hat folgendes geschrieben: | Grundsätzlich jedenfalls: Schönes Programm. Sowas hatte ich auch mal geschrieben, aber nie wirklcih fertig geschrieben und veröffentlicht. Und das kann ich mir ja jetzt sparen . Danke!  |
Dankesehr  bzw. gern geschehen 
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 01.01.07 23:44
JayK hat folgendes geschrieben: | jaenicke hat folgendes geschrieben: |
Da es viele solcher Programme gibt, solltest du dann eine entsprechende Meldung ausgeben, dass das für das Programm essentiell wichtig ist mit einer kurzen Erklärung oder so. |
Wird gemacht. Nur die Zugriffsverletzung kann ich mir auf Anhieb nicht erklären. |
Habs mir jetzt nur kurz im Editor angesehen, aber der Fehler liegt daran, dass du gar nicht nachsiehst, ob du überhaupt Zugriff auf einen bestimmten Pfad bekommst. Ich nehme an, dass die Firewall schon das Öffnen des Schlüssels unterbindet. Aber das kann ich ggf. auch genauer testen. Beispiel: Delphi-Quelltext 1: 2: 3:
| reg.OpenKey(RegistryKeys.StartupAce, true); reg.OpenKey(a.Caption, true); reg.WriteString('Path', UTF8Encode(a.Path)); |
Das würde ich so machen: Delphi-Quelltext 1: 2: 3: 4:
| if reg.OpenKey(RegistryKeys.StartupAce + '\' + a.Caption, true) then reg.WriteString('Path', UTF8Encode(a.Path)) else ShowMessage('Fehler!'); |
Ich hab mal dieses Beispiel und nicht das mit dem Run-Key selbst genommen, weil ich auch zeigen wollte, dass du nicht mehrere OpenKey-Befehle brauchst. Oder braucht man die, wenn RegistryKeys.StartupAce schon nicht existiert? Wird das nicht auch angelegt, wenn man es so macht wie ich?
Aber das mit dem Auswerten des Rückgabewertes von OpenKey sollte man halt generell machen. Ob das wirklich der Fehler bei der Firewall ist, ist bisher nur eine Vermutung, die ich aber gleich ausprobieren werde. Unabhängig davon solltest du aber trotzdem den Rückgabewert in dieser Weise beachten.
|
|
JayK 
      
Beiträge: 1013
|
Verfasst: Di 02.01.07 00:38
jaenicke hat folgendes geschrieben: |
Habs mir jetzt nur kurz im Editor angesehen, aber der Fehler liegt daran, dass du gar nicht nachsiehst, ob du überhaupt Zugriff auf einen bestimmten Pfad bekommst. |
Hm hast Recht.
Und wegen dem zweimaligen OpenKey... weiß auch nicht, wie ich darauf wieder kam. Aber u.a. dazu stelle ich das Programm ja öffentlich zur Verfügung, nicht wahr?
Ich hab ne neue Version hochgeladen. Müsste jetzt eine Erklärung für das Eintragschreiben kommen und für den Fall, dass man irgendwelche Schlüssel nicht öffnen kann, einige Fehlermeldungen <> Zugriffsverletzung.
|EDIT: das mit dem in die Walachei klicken und Fehlermeldung ist auch gefixt.
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 02.01.07 00:50
Nein, da stimmt was nicht, ich bekomme IMMER die Meldung "Cannot access the Startup Ace registry key!", wenn ich das Programm starte oder einen Testlauf machen will.
Mit der Firewall hat das nicht zu tun, die meldet sich erst am Ende, wenn ich die Änderungen speichern will.
Eventuell brauchst du eben beide OpenKey-Befehle doch, damit der erste Bestandteil des Schlüsselpfads auch angelegt wird. Da war ich mir nicht sicher, das hab ich ja auch dazu geschrieben. Ich dachte, du löschst einfach die Einträge im Registrierungeditor bzw. benennst den Schlüssel um, um deine Einstellungen nicht zu verlieren, und testest es  . Dann müssten bei dir ja dieselben Fehlermeldungen kommen wie bei mir.
Übrigens: Die Firewall springt wohl erst beim Schreiben des Eintrags selbst ein. Da wird dann wohl eine Exception ausgelöst, die du mit try..except abfangen musst. Aber das kann ich dir in 10 Minuten oder so genau sagen.
Ach so: Ich benutze ZoneAlarm Pro, falls du es mit der Trial selbst testen willst...
// EDIT:
Es liegt daran, dass du in DeleteOldStartupAceEntry die Fehlermeldung ausgeben lässt, obwohl ja ein alter Key eventuell gar nicht existiert... Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| if reg.OpenKey(RegistryKeys.StartupAce, false) then begin reg.DeleteKey(e.OriginalCaption); reg.CloseKey; Result := True; end else begin MessageBoxW(Application.Handle, 'Cannot access the Startup Ace registry key!', 'Error', MB_OK or MB_ICONERROR); end; |
|
|
JayK 
      
Beiträge: 1013
|
Verfasst: Di 02.01.07 01:01
Bei mir klappt alles... und ich weiß auch warum. Das is ja ein gaaaaanz blöder Fehler
Klar kann er den Schlüssel bei dir noch nicht öffnen, denn du hast ihn ja noch nicht, da noch keine Startup Ace Einträge bei dir existieren  neenee ich glaub ich mach dann jetzt lieber Schluss, schon wieder Mitternacht.
Das hab ich mal eben noch ausgebaut, guck mal bitte, ob es jetzt klappt.
|Edit: nein an DeleteOldStartupAceEntry dürfte es eigentlich nicht liegen, denn wenn der Schüssel nicht existiert, existierten auch keine StartupAce-Einträge zuvor darin und diese Funktion wird garnicht erst aufgerufen
Soweit zur Theorie jedenfalls...
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 07.01.07 17:20
Eigentlich wollte ich mir dein Tool jetzt auch mal angucken, es geht aber nicht
Gleich beim Start bekomme ich eine "Zugriffsverletzung bei Adresse 0051DFC8 in Modul 'StartupAce.exe'. Lesen von Adresse 00000002"
Ich würde es mir ja selber angucken, aber extra deswegen TBX usw. installieren, nee...
Irgendeine Idee, was das ist?
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
JayK 
      
Beiträge: 1013
|
Verfasst: So 07.01.07 18:07
Erstmal nein. Startet das Programm nach der Zugriffsverletzung noch? Oder wird es dadurch beendet? Wenn es nicht beendet wird, stehen dann irgendwelche Einträge in der Liste? Wenn ja, was ist der letzte Eintrag?
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 07.01.07 18:16
Die Zugriffsverletzung kommt in einer Endlosschleife. Da wird in der Liste ein Eintrag nicht gezeichnet, ich weiß bloß nicht, welcher
Versuch mal das (weiß nicht, ob du das schon gemacht hast): Programm in Delphi starten, zu Delphi wechseln,
Suchen->Laufzeitfehler suchen...
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
JayK 
      
Beiträge: 1013
|
Verfasst: So 07.01.07 18:25
Das Feature 'Laufzeitfehler suchen' gibt es bei mir (Turbo Delphi) nicht. Ich finde keinen Eintrag dafür im Menü suchen.
Sicher, dass die Fehlerschleife unendlich ist? Ich vermute mal eher, dass für jeden einzelnen Eintrag eine oder mehrere Zugriffsverletzungen kommen (was schon unangenehm genug und für mich bis jetzt unerklärt ist). Wenn dir das nicht zu blöd ist, versuch mal bitte eine Weile Enter gedrückt zu halten für die Zugriffsverletzungen, vllt kommt er ja irgendwann ^^
Ich such den Code beim Starten noch ein zweites Mal ab...
|
|
Andidreas
      
Beiträge: 114
Windows XP Pro
BDS 2006
|
Verfasst: So 07.01.07 18:31
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| if reg.OpenKey(RegistryKeys.StartupAce, false) then begin reg.DeleteKey(e.OriginalCaption); if ValueExistst(...) then DeleteValue(...) reg.CloseKey; Result := True; end else begin MessageBoxW(Application.Handle, 'Cannot access the Startup Ace registry key!', 'Error', MB_OK or MB_ICONERROR); end; |
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 07.01.07 18:37
Also, der Fehler tritt beim Zeichnen eines Eintrages mit Leerem Pfad auf. Hab ich getestet, indem ich alle Spalten einteln mit nem Fenster abgedeckt hab. Nur, wenn die Pfad-Spalte neu gezeichnet werden soll, gibts Exceptions. Das Programm heißt NWEReboot (gehört irgendwie zu Nero).
Den hab ich jetzt mit nem anderen Programm gelöscht, jetzt geht auch dein Tool  Aber irgendwo ist da noch was mit leeren Pfadangaben fehlerhaft...
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
JayK 
      
Beiträge: 1013
|
Verfasst: So 07.01.07 18:42
@Andidreas: Was ist denn das?
DeleteKey ist vollkommen richtig an der Stelle. Guck dir mal die Pfade für die Startup Ace Einträge an, das SIND Keys, keine Values.
Warum soll ich bei einem Schlüssel, den ich löschen will, gucken, ob er vorher da ist?
Vorausgesetzt dass der User nicht während das Programm läuft, in der Registrierung rumfummelt, ist der Schlüssel sowieso vorhanden, sonst wäre e.OriginalRunType nicht rtStartupAce und e.OriginalCaption kommt auch von nirgendwo anders als diesem Schlüssel, der gelöscht werden soll.
@Martok: das ist schön. Dass es funktioniert, nicht dass er leere Pfade verhaut natürlich. Ich guck da nochmal rein.
Interessant wäre noch gewesen, wie der Pfad von dem NWWReboot in der Registry aussah... weißt du den noch? Denn der Eintrag wird ja nicht wirklich leer gewesen sein, nehme ich an.
|EDIT: gefunden. Wieder so eine Sache, wo ich es mir einfach zu einfach gemacht hab.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| case Column of COL_PATH: begin if (e.Path[2] = ':') and not TPath.Exists(TPath.Expand(e.Path)) then begin TargetCanvas.Brush.Color := $8888FF; TargetCanvas.FillRect(CellRect); end; end; |
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: So 07.01.07 18:46
JayK hat folgendes geschrieben: |
Interessant wäre noch gewesen, wie der Pfad von dem NWWReboot in der Registry aussah... weißt du den noch? Denn der Eintrag wird ja nicht wirklich leer gewesen sein, nehme ich an. |
Auch wenn sich das nach deinem Edit vermutlich erledigt hat.... er war wirklich leer.
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
JayK 
      
Beiträge: 1013
|
Verfasst: So 07.01.07 19:20
So. 0.3 steht oben, der Fehler ist behoben.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 21.01.07 10:39
ein cooles feature wäre, wenn man durch klick auf eine anwendung, diese aus dem autostart entfernen könnte, so müsste man net suchen und könnte sagen: "Du, weg da !!! "
mfg
|
|
JayK 
      
Beiträge: 1013
|
Verfasst: So 21.01.07 12:18
Hi F34r, ich versteh nicht ganz was du meinst. In der Liste der Autostarts musst du nur einen Eintrag auswählen und entf drücken, speichern und gut is.
Suchen muss man den Eintrag doch so oder so?
Kannst du bitte nochmal genauer erklären, was du meinst? Ich komm grad net dahinter ^^
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 22.01.07 07:54
Hihi, ich nehme mal an, es ist gemeint, einfach ein Fenster einer laufenden Anwendung auszuwählen und damit zu sagen, dass deren Autostart eingestellt werden soll...
Fände ich übrigens wirklich eine gute Idee...
Den Code, um ein Fenster auszuwählen, könnte ich dir geben, das hab ich für ein eigenes Programm mal gebraucht, geht mit einem MouseHook relativ einfach.
|
|
JayK 
      
Beiträge: 1013
|
Verfasst: Mi 31.01.07 18:20
Hehe, ich finds schon interessant, dass niemand bemerkt zu haben scheint, dass man weder im ListView beim Dateipfad oder bei den Argumenten, noch im rechten Panel mit den Checkboxen für Active und All Users irgendetwas an den Autostarts verändern konnte ^^
Die spTBX-Kompos updaten ihre Text-Property wohl erst, wenn sie nicht mehr den Fokus haben, musste das ganze jetzt also über GetWindowTextW machen.
Und die Checkboxen... da war wohl irgendwie die Zeile abhanden gekommen, wo die StartupEntry-Property überhaupt verändert wird
Wie auch immer, der Schlammassel ist bei mir jetzt gefixt ^^ entschuldigt bitte die etwaigen Unannehmlichkeiten
@Fear, @jaenicke: klingt interessant und ich glaube, dafür hätte auch ich Verwendung. Ich warte damit wohl aber noch bis zu den Ferien (nächste Woche), denn in der Schulzeit hab ich eher zu wenig Zeit mir das von dir erklären zu lassen jaenicke  Ich hoffe mal, dass ich wenigstens dann ordentlich Zeit finde.
|
|
|