Entwickler-Ecke

Open Source Projekte - Startup Ace - Autostart mal etwas anders


JayK - Mo 01.01.07 22:34
Titel: Startup Ace - Autostart mal etwas anders
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 :D

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:

[url=http://jayk.endofinternet.net/images/startupace/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

http://jayk.endofinternet.net/download.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.

http://jayk.endofinternet.net/download.php?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


jaenicke - 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! :zustimm:

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 - Mo 01.01.07 23:33

user profile iconjaenicke 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.

user profile iconjaenicke 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 :?

user profile iconjaenicke 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.

user profile iconjaenicke 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.

user profile iconjaenicke 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! :zustimm:

Dankesehr :) bzw. gern geschehen ;)


jaenicke - Mo 01.01.07 23:44

user profile iconJayK hat folgendes geschrieben:
user profile iconjaenicke 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 - Di 02.01.07 00:38

user profile iconjaenicke 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 - 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 - Di 02.01.07 01:01

Bei mir klappt alles... und ich weiß auch warum. Das is ja ein gaaaaanz blöder Fehler :oops:
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 :lol: 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 - 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?


JayK - 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 - 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 :nixweiss:

Versuch mal das (weiß nicht, ob du das schon gemacht hast): Programm in Delphi starten, zu Delphi wechseln,
Suchen->Laufzeitfehler suchen...


JayK - 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 - 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); // ist ja wohl ein Schuß in den Ofen
      // Erstmal Abfrage, ob Wert vorhanden
      if ValueExistst(...) then
      // Wenn ja, Wert löschen. DeleteKey würde ja den kompletten
      // Software\Microsoft\Windows\CurrentVersion\Run löschen
        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 - 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...


JayK - 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 - So 07.01.07 18:46

user profile iconJayK 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.


JayK - So 07.01.07 19:20

So. 0.3 steht oben, der Fehler ist behoben.


F34r0fTh3D4rk - 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 - 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 - 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 - 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.


JayK - Di 06.02.07 15:20

Und ich schieb gleich nochwas kleines hinterher:


JayK - So 11.02.07 13:14

Da war noch ein Fehler drin... wenn man einen neuen Eintrag erstellte hat (per File > New Entry), dann wurden alle bestehenden StartupAce-Eintrage gelöscht. Das soll ja nun nicht Sinn der Sache sein. Gefixt und korrigierte Version hochgeladen.


JayK - Di 06.03.07 17:41

Ein eher mickriges Update, das es möglich macht im Hauptformular der Autostart-Konfiguration auch den Office2003-Stil zu haben und - der eigentliche Anlass des Updates - einer Zugriffsverletzung auf dem Autostart-Formular, wenn man mit rechter Maustaste drauf klickt, ohne einen Eintrag selektiert zu haben, wurde nun vorgebeugt.


JayK - Do 05.04.07 17:47

Hier kommt Version 0.5...

Neu
- "Go to Path" Menüitem im Eintragskontextmenü (Hauptformular), das den Explorer mit der Datei aus dem Autostartpfad selektiert öffnet
- Tastenkürzel im ListView
F2: Autostart umbenennen
F3: Pfad ändern
F4: Argumente ändern
F5: Autostartort ändern (Startup Ace/Registry/Startup Folder)
F6: Autostartverzögerung ändern
F7: Alle Benutzer / momentaner Benutzer umschalten
F8: Aktiviert/Deaktiviert umschalten
- beim Editieren im ListView gibt es nun auch die Browse-For-File bzw. Insert-Path Funktionen, die es vorher nur im Panel rechts gab. Zur Erinnerung: Browse-For-File beim Pfadeditieren öffent einen Dateiauswahldialog und Insert-Path dient zum Einfügen von Dateipfaden in die Argumentzeile.
- im ListView beim Argumenteändern kann man nun auch ein extra fenster mit Memo öffnen lassen, falls die Argumentliste zu lang wird
- es wird nun verhindert, dass zwei Autostarts den selben Namen bekommen. Sollte der Fall zweier gleichnamiger Einträge trotzdem auftreten, ist es nicht erlaubt zu speichern, falls diese zwei gleichnamigen Einträge auch noch an die selbe Stelle (z.B. Autostartordner) geschrieben werden sollten - dabei würde der eine den anderen ja überschreiben.
- Bis jetzt stand nirgendwo, dass man seine Änderungen noch im Menü speichern muss. Jetzt gibt es immerhin einen Hinweis im StatusBar und einen zusätzlichen Speichernknopf gleich daneben.
- Hint Button auf dem Startform, der eine html-Seite mit den dortigen Tastenkürzeln anzeigen lässt

Geändert
- Panel rechts auf dem Hauptformular entfernt. Alle Bearbeitung wird nun im ListView abgewickelt.
- Auf dem Startform gelten Leertaste (Eintrag sofort starten) und Entfernentaste (Eintrag überspringen) nun für den gerade ausgewählten Autostarteintrag, statt für den Eintrag ganz oben in der Liste. Dieser wird nun mit Umschalt+Leertaste bzw. Umschalt+Entf extra erreicht.

Fixed
- Delay Shifter Werkzeug änderte auch Verzögerungen von nicht-editierbaren Autostarts, die man in der Liste bei der Werkzeugverwendung nicht einmal sah. Dies führte zu Zugriffsfehlern beim Speichern.


hui1991 - Do 05.04.07 20:19

hi,

dein Link macht es schwer das viele es runterladen.
Wenn man anstatt ".zip", "-zip" schreibt ^^
Könntest du das bitte ändern.
Da bei:
http://www.dunkelseelen.de/jayk/downloads/StartupAce-000005-zip
das hier kommt:


Der Richtige Link ist aber:
http://www.dunkelseelen.de/jayk/downloads/StartupAce-000005.zip

Noch besser finde ich es hier als Anhang anzuhängen ^^
Falls mal dein Server down geht ^^
Ehm außerdem ist die Datei dann 0 Byte groß??
Ist bei mir der Fehler oder bei allen so?
Das Programm wird im lauf der Tage getestet.
Hoffentlich vergesse ich es nicht was darüber zu schreiben ^^

MfG
hui1991

edit://
Da die Version 0.5 nicht Vollstädig zum Download bereit ist habe ich mir mal die Version 0.4 geladen.
Also ich kann sagen, großes Lob. Ich kann wieder so wie früher den Firefox starten ohne das ein anderes Programm was gleichzeitig macht.
Naja das Programm braucht selber lange zum starten, ca. 50 Sekunden.
Denke mal es liegt an meinem Kaputten Windows:
Jedes mal, wenn ein Programm ein anderes Programm öffnet hängt sich das Programm auf das gerade ein anderes öffnet.
Windows öffnet explorer.exe, Windows hängt, explorer.exe öffnet ein Programm (z. B. Word), explorer.exe hängt... viele sekunden später, explorer.exe hängt nicht mehr und Word startet.

Design ist sehr gut.
Eine sache die ich bei der 0.4 nicht gut finde ist.
Sobald man ein Eintrag anklick will er das schon ändern.
Besser wäre, Markieren und ein klick fürs ändern.


JayK - Fr 27.04.07 22:30

Hallo hui1991,

die Links die du da hast möchte ich von niemandem, dass er sie benutzt! Ich möchte die Dateien nicht direkt vom Server geladen haben sondern über das Downloadskript, das die Downloads zählt. Achso, hast trotzdem recht, verdammter Tippfehler in der Umleitung, gefixt ;) Ich Trantüte hab wahrscheinlich mal wieder das Linktesten vergessen.
@Anhang: ich finds für mich aber bequemer und einfacher es auf meinem Webspace zu haben. Wenn der Server down geht, dann bitte ich Bescheid zu sagen, dann kann ich einen Anhang reinstellten, als Notlösung.
user profile iconhui1991 hat folgendes geschrieben:
Ehm außerdem ist die Datei dann 0 Byte groß??

Nee... doch... verdammt da is wohl ordentlich was schiefgelaufen am 5.4. -.- Vllt war rar noch nicht fertig als ichs hochgeladen hab, aber ich versteh nicht ganz, wie mir sowas passieren kann... wie auch immer, jetzt ist eine 674 KB große Datei da ;)

user profile iconhui1991 hat folgendes geschrieben:
Also ich kann sagen, großes Lob.

Vielen Dank. :)

user profile iconhui1991 hat folgendes geschrieben:
Naja das Programm braucht selber lange zum starten, ca. 50 Sekunden.
Denke mal es liegt an meinem Kaputten Windows:
Jedes mal, wenn ein Programm ein anderes Programm öffnet hängt sich das Programm auf das gerade ein anderes öffnet.
Windows öffnet explorer.exe, Windows hängt, explorer.exe öffnet ein Programm (z. B. Word), explorer.exe hängt... viele sekunden später, explorer.exe hängt nicht mehr und Word startet.

Hm mir fällt eigentlich bei mir immer auf, dass mein Programm ziemlich schnell startet... kaum eine Sekunde (geschätzt!). Kann sich noch jemand dazu äußern?

user profile iconhui1991 hat folgendes geschrieben:
Sobald man ein Eintrag anklick will er das schon ändern.
Besser wäre, Markieren und ein klick fürs ändern.

Naja... das ist Ansichtssache. Ich persönlich hab es lieber, ganz schnell zum Ziel zu kommen und einmal weniger klicken zu müssen ;) Bei 0.5 hab ich unter anderem die Tastaturunterstützung ausgebaut, was das Benutzen der Maus teilweise sogar unnötig macht. Warte noch ein oder zwei Stunden [EDIT: oder wohl doch noch ein paar Tage...] dann stell ich ne neue Version hoch, wo das Listview mit seinen Shortcuts, die es schon in der aktuell hochgeladenen hat, auch beschriftet ist :angel: Obwohl ich seh grad, alternativ stehen die ja auch in meinem letzten Beitrag.
Tipp: das Klick->Ändern gilt beim Eintragsnamen (Caption) nicht. Wenn du dort klickst ersparst du dir die Editfelder fürs Erste.

|EDIT: und ich bitte um Verzeihung für die späte Antwort, irgendwie hab ich entweder keine Mail bekommen oder sie übersehen...

Schöne Grüße


JayK - Sa 28.04.07 01:44

Ok, hab grad noch ein Update hinterhergeschoben - und verifiziert, dass die Links im Post zumindest bei mir funktionieren und größer als 0 Byte Dateien herauskommen :)

Gute Nacht. :gaehn:


OlafSt - Fr 04.05.07 09:12

Mir ist da noch ne Winzigkeit aufgefallen...

Ist es machbar, Programme im Autostart erst dann hochlaufen zu lassen, wenn ein anderes bereits läuft ?

Ich denke da an den großen Streß mit meinem STLCD (LCD-Ansteuerungsprogramm), das sich von dutzenden Programmen via Shared Memory Daten holen kann - aber erst, wenn diese auch laufen. Bin ich zu früh dran, komm ich ans Shared Memory nicht mehr dran...

Konkretes Beispiel:

- SpeedFan starten (im Autostart)
- STLCD starten (WaitFor SpeedFan)

Kann man ggf. soweit vereinfachen, das es nur ein Flag gibt "WaitFor" und das markierte Programm auf den Start das vorherigen wartet.


JayK - Fr 04.05.07 14:52

Weiß jetzt, warum ich hui1991s Antwort verpasst hab: die Mail landete im Spamordner :P

@OlafSt: ich vermute grundsätzlich ist es möglich, dass er nach jeder Sekunde guckt, ob ein Prozess mit diesem bestimmten Namen existiert - bin aber auf diesem Gebiet kein Experte ;) Muss also erst lesen. Und da ich momentan wirklich absolut keine Zeit habe irgendetwas zu programmieren, wird das wohl noch ein bisschen dauern :(
Als Übergangslösung kann ich nur empfehlen, per Verzögerung STLCD ne ordentliche Zeitspanne nach dem anderen (z.B. SpeedFan) zu starten, falls das hilft...

Schöne Grüße


OlafSt - Mo 07.05.07 14:44

Nen Prozess suchen macht man ungefähr so (absichtlich ausführlich geschwafelt):


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:
function FindProcess(ExeNam: string): boolean;
var
   PIDArray: array [0..1023of DWORD;
   cb: DWORD;
   I: Integer;
   ProcCount: Integer;
   hMod: HMODULE;
   hProcess: THandle;
   ModuleName: array [0..300of Char;
   s:string;
   Found: boolean;
begin
     Found:=false;
     EnumProcesses(@PIDArray, SizeOf(PIDArray), cb);
     ProcCount := cb div SizeOf(DWORD);
     for I := 0 to ProcCount - 1 do
     begin
          hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or
            PROCESS_VM_READ,
            False,
            PIDArray[I]);
          if (hProcess <> 0then
          begin
               EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb);
               GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName));
               s:=ModuleName;
               s:=Uppercase(s);
               CloseHandle(hProcess);
               if s=Uppercase(ExeNam) then
               begin
                    Found:=true;
                    break;
               end;
          end;
     end;
     Result:=Found;
end;


Ich habs in STLCD im übrigen vor zwei Jahren dann anders gelöst - als ich von diesem Autostarter las, tauchte diese Problematik wieder im Gedächtnis auf und ich dachte, ist vllt. ne brauchbare Sache für Dein Projekt...


JayK - Fr 22.06.07 22:02

Hallö,

ich hätte da mal wieder eine neue Version anzubieten.


Das mit dem Prozessnachgucken hab ich durch anderen Code gelöst @OlafSt... ich hatte irgend einen Grund dafür, aber ich kann mich grad nicht mehr erinnern, welcher das war ^^ auf jeden Fall funktioniert die jetzige Methode unter NT4 nicht, also die NT4-Benutzer dürfen das Wait-For-Feature nicht benutzen. Bisher hab ich aber auch noch keinen Code eingebaut das zu verhindern. Bei denen wird der Eintrag momentan einfach nie gestartet werden.

Schönen Abend noch.


OlafSt - Mi 27.06.07 12:33

Bezieht sich das mit NT4 auf meinen Code da oben ? Würde mich wundern, denn der funktioniert unter NT4 und höher...

Im übrigen kannst du den gern verwenden, wenn du möchtest. Ich poste hier keinen Code, der einem (C) unterliegt...


JayK - Mi 27.06.07 12:45

Nein dein Code ging irgendwie nicht oder ich wollte Windows 98 drin haben oder oder, ich hab vergessen, warum ich den nicht benutzt hab ^^ aber es lag nicht an Copyright bedenken ;)
Die Lösung der aktuellen Version läuft unter NT4 nicht, weil da irgendwelches Zeugs in Windows fehlt, das aber bei 98 schon drin war... werde später wahrscheinlich noch nen else-Zweig mit der NT4-korrekten Variante machen, aber die kann ich nicht testen.


Zyklame - Sa 18.08.07 11:15

Es gibt noch einen paar Fehler:

1.
wenn mann einen Eintrag von Registry auf StartupAce ändert bleibt der Registry Eintrag erhalten
(wird aber erst wieder angezeigt wenn man auf aktualisieren "Reload List" klickt)
es wäre besser, wenn dieser dann gelöscht oder wenigstens deaktiviert wird.

(in der umgekehrten Richtung ist es das gleiche)

Bei meinem 1. Start habe ich mich desshalb gewundert warum alles schon startet obwol es noch gar nicht starten dürfte.

2.
Ich habe dass Programm "Notebook Hardware Controll" mit Startup Ace gestarten und dieser eintrag verschwindet nach dem Programmstart nicht. Bei den restlichen Programmen funktioniert es.
(vieleicht liegt es daran das dieses Programm nur als Tray Icon in der Taskleiste Startet und keine Form erzeugt)


Noch ein Verbesserungsvorschlag:


es wäre schön wenn man das Programm (den Starten) minnimiert starten könnte.


An sonsten finde ich das Programm nicht schlecht.


JayK - Sa 18.08.07 23:14

Hallö,

1. du hast Recht, ich glaub es ja nicht... wie konnte mir das nur entgehen? Hat das bei mir nicht neulich noch geklappt? :gruebel: Naja wie auch immer, ich werde es fixen, sobald ich wieder Zeit habe.

2. hab ich noch nicht so richtig verstanden... das Ding wird im Starter angezeigt, abgewartet, letztendlich gestartet... und dann bleibt der Eintrag dort stehen anstatt gelöscht zu werden oder wie? Dass das Programm ohne Form läuft kümmert StartupAce herzlich wenig... da steckt nur ein ShellExecute zu gegebener Zeit dahinter.
Wenn das Programm gestartet wird: kannst du mir genauer beschreiben, was da abläuft, was siehst du?
Wenn das Programm nicht gestartet wird: wartet es auf einen anderen Prozess zu starten (die ListView-Spalte, die man per F11 erreicht)? Ist es aktiviert?

Verbesserungsvorschlag: ließe sich einrichten.

Grüße


JayK - Di 21.08.07 14:14

Ok ich hab das Problem mit dem Nichtentfernen der alten Einträge gefixt. War mal wieder ein Tippfehler -.-
Minimieren ist auch drin.

Neue Version hochgeladen.


BenBE - Fr 09.05.08 20:16

Gibt's hier Neuigkeiten in Bezug auf das Programm ???

Hab's jetzt noch nicht getestet (werd ich aber sicherlich die Tage): Kann man damit auch die Links im Start Menu Folder umplatzieren?

Ich hab vor etwa 1-2 Monaten mal ne Routine zum Detectieren der Response-Fähigkeit eines Programms nach dessen Start geschrieben (also ne Routine, die auf die Bereitschaft eines Programms wartet)... Hast Du da was in die Richtung schon drin? Also Programme in definierter Reihenfolge starten, aber immer nur so, dass maximal ein Programm gleichzeitig noch läd?

MfG,
BenBE.

P.S.: Wo ist'n der aktuelle Download-Link?


BenBE - Sa 10.05.08 12:50

Kurzer Zwischenstand:


Bitte also noch mal dringend nachbessern!

Ansonsten funzt das Programm für meinen Rechner so wie ich's brauch ... (Der hängt sich ansonsten nämlich gern mal beim Booten auf ...)

MfG,
BenBE.


JayK - Sa 10.05.08 20:45

Hm also zuerst muss ich dich erstmal enttäuschen... nach meinem Umstieg auf Linux letzten Sommer hab ich das Programm und generell Delphi eigentlich gar nicht mehr angeguckt. Mittlerweile hab ich auch mangels Windows nicht mal mehr die praktische Möglichkeit dazu, deshalb könnte ich nur vollkommen ungetesteten Code schreiben, was ja auch nicht so dolle ist. Ich muss das mal in den ersten Post schreiben.

Download ist wiederhergestellt. Irgendwie beschließt mein Downloadskript jedes Jahr einmal die Hufe hochzureißen. Der Screenshot ist nun auch wieder erreichbar - war einer übereifrigen Löschaktion zum Opfer gefallen :oops:

Unterschiedliche Färbung von Registry und Startmenü: keine Schlechte Idee, wollte damals nur engstirnigerweise die Einträge meines Programms von anderen unterscheiden... ist ein kurzer Eingriff in die TMainForm.VSTBeforeCellPaint Prozedur in der Unit Main.pas. Dort müsste unter COL_TYPE: das if- durch ein case-Konstrukt ersetzt werden. Die Runtypes sind rtStartupAce, rtRegistry und rtLnk.

Wobei mir grad auffällt, dass ich damals so gut wie gar nichts kommentiert hab :autsch: Bitte aber um Aussetzung der Erschießung dafür.

Fehler beim Neuen Eintrag: kann ich hier aus oben genannten Gründen ja leider nicht reproduzieren, weil ich das Programm gar nicht verwenden kann, oder rückverfolgen. Wundern tut mich das aber doch, weil ich diese Stellen (Einfügen und Speichern) schon x mal gefixt hatte... Linie: 0? So nur vom Lesen der Fehlermeldung kann ich auch gar nicht sagen, an welcher Stelle das auftreten könnte. :(

Wenn jemand das Projekt übernehmen möchte, würde ich mich darüber freuen. Derjenige möge sich bitte bei mir melden, oder es einfach tun...