Autor Beitrag
hassedelphi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WIN XP
D7 Enterprise
BeitragVerfasst: Sa 23.08.03 08:09 
hi
ist es mit verständlichem qt zu bewerkstelligen, dass sich das programm automatisch beim hochfahren von windows startet?

Moderiert von user profile iconTino: Titel geändert & Topic verschoben.

_________________
you're not be able to help, that you're an human
cromos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 219


Delphi 7
BeitragVerfasst: Sa 23.08.03 09:46 
Hi,

Am besten via Registry. Stichwort "TRegistry"

Dann komt es auch noch darauf an was für ein System du hast.
Win 98 oder 2000,XP usw.

Bei XP und 2000 kannst du z.b. den Schlüssel

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

nehmen.

Gruss
Cromos
derDoc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 623

Win Vista Prof
D2007 Prof
BeitragVerfasst: Sa 23.08.03 09:59 
Der Schlüssel ist auch bei Win9x vorhanden.

Du kannst die Datei auch einfach in das Autostartverzeichnis (Systemabhängig) kopieren.

_________________
MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 23.08.03 10:36 
Anmerkung zu beidem:

Der Schlüssel HKEY_LOCAL_MACHINE setzt bei NT-Systemen spezielle Berechtigungen voraus, weil da nicht jeder drin rumschreiben kann. Vorteil auf der anderen Seite: der Autostart gilt dann für alle angemeldeten Benutzer.
Wenn man den Autostart im Programm ein- und ausschalten können soll, dann würde ich über HKEY_CURRENT_USER nachdenken, weil dann jeder Benutzer die Möglichkeit hat, das Programm nach seinem Wunsch automatisch zu starten ... oder eben nicht ... (Allerdings hat nicht jeder Benutzer auch Admin-Rechte. Und das ist IMHO auch richtig so!)

Und wenn´s der Autostart-Ordner sein darf, dann gilt das gleiche. @derDoc: Systemabhängig? Es gibt eine Shell-Funktion, mit der du systemunabhängig unter jeder Windows-Version den Autostart-Ordner ermitteln kannst. Die Frage ist hier nur wieder: soll das Programm nur dem aktuell angemeldeten Benutzer zur Verfügung stehen? Oder soll es generell gestartet werden, egal wer sich anmeldet. In dem Fall ist der Autostart-Ordner von "All Users" zu suchen. Und das ist bloß eine andere CSIDL-Konstante. :)
derDoc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 623

Win Vista Prof
D2007 Prof
BeitragVerfasst: Sa 23.08.03 11:23 
Vielleicht besitzt der Herr ja die Güte auch diese CSIDL Konstante zu benennen.
Und vielleicht kann er mir auch sagen, wo der "All Users" Autostartordner auf einem Windows 98 sein soll.

Was ich aussagen wollte ist, dass bei Win9x der Autostartordner ein anderer ist, als bei WinNT.

_________________
MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 23.08.03 12:15 
Entschuldigung.

Ich bin mal davon ausgegangen, dass du den entsprechenden FAQ-Beitrag mit den speziellen Windows-Ordnern evtl. kennst. Dort wird (wie eigentlich immer in solchen Fällen) das Platform SDK von Microsoft als Referenz genannt. Online als Teil der MSDN zu finden. Und wenn man sich die benutzte Shell-Funktion (SHGetSpecialFolderPath, und Co.) mal anschaut, kommt man automatisch zur Liste mit den CSIDL-Konstanten.

Der Autostart des angemeldeten Benutzers wäre bspw. "CSIDL_ALTSTARTUP", der für alle Benutzer "CSIDL_COMMON_ALTSTARTUP".

Und darum spielt es auch keine Rolle, auf welchem Windows du die Funktion aufrufst. Sie liefert in jedem Fall den richtigen Ordner zurück, da sie intern die OS-abhängigen korrekten Daten sucht. Wichtig ist nur, dass du bei den CSIDL-Konstanten die Versionsangabe beachtest. Manche der Konstanten stehen bspw. erst ab Version 5.0 der "shell32.dll" zur Verfügung (Win ME, 2000 und höher) und würden dann natürlich unter einer älteren Version kein Ergebnis haben.

Außerdem kann man auch unter Windows 9x mehrere Benutzerkonten einrichten. Es ist zwar nicht mit einem NT-System vergleichbar, aber ich habe jetzt bereits einen Ordner "Windows\All Users\Startmenü\Programme\Autostart" - und bei mir ist unter 98 nur ein Benutzer eingerichtet.

Ich hoffe, deine Neugier ist gestillt ... die Fragen sind geklärt ... ?
derDoc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 623

Win Vista Prof
D2007 Prof
BeitragVerfasst: Sa 23.08.03 12:58 
Ich wollte nur erfahren, welches CSIDL du meintest, weil ich bisher immer CSIDL_COMMON_STARTUP (Nur auf NT), bzw. CSIDL_STARTUP benutzt habe.

_________________
MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 23.08.03 13:32 
Die meine ich ja eigentlich auch. Bin beim Kopieren im PSDK versehentlich auf ALTSTARTUP gerutscht. Was ich aber sagen will ist, dass CSIDL_STARTUP und CSIDL_COMMON_STARTUP sowohl unter NT als auch unter 9x funktionieren.
hassedelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WIN XP
D7 Enterprise
BeitragVerfasst: Sa 23.08.03 17:05 
thx für antworten. aber ehrlich gesagt habe ich nichts verstanden :cry: :oops: . geht dass nicht irgendwie einfacher?

_________________
you're not be able to help, that you're an human
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Sa 23.08.03 17:30 
Hallo,

also dir wurden hier 2 mögliche Lösungen vorgestellt.

Die erste funktioniert mit der Registry von Windows. Du kannst unter folgenden Schlüsseln wählen, wo du dein Programm reinschreiben willst.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, wenn das Programm immer beim Start geladen werden soll.
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, wenn der Benutzer selber entscheiden soll, ob das Programm gestartet werden soll. Somit gilt die Einstellung dann nur für das eine Benutzerkonto.

Wie du solche Werte in die Schlüssel einträgst, findest du im FAQ bzw. du kannst die Forensuche bzw. Delphi-Hilfe mal nach TRegistry durchsuchen. Da wirste bestimmt fündig. Und keine Angst, schwer ist das nicht. :)

Die zweite Methode ist nun folgende: Du kannst ein Verknüpfung in den Autostart-Ordner kopieren. Nun gibt es dabei aber ein kleines Problem. Windows 9x und WinNT benutzen nicht die gleichen Ordner für den Autostart. Um diesen herauszufinden, kannst du die Funktion SHGetSpecialFolderPath verwenden. Mit den CSIDL-Konstanten kannste der Funktion dann übergeben, was für einen Ordner du willst. Für Informationen, kannste auch hier im Forum suchen (dürfte da sicher schon ein paar Threads geben) oder am besten guckst du gleich in der PSDK bzw. in der MSDN-Library ( msdn.microsoft.com/library/default.asp ).

Wie man eine Verknüpfung anlegt, steht garantiert hier im Forum. :wink:

Noch ein abschließendes Wort: Ich würde dir die zweite Methode verwenden, da ich es als Benutzer grundsätzlich hasse, wenn sich ein Programm in die Registry hängt, aber das musst du schließlich selber entscheiden. :)

_________________
Viele Grüße
Jakob
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 23.08.03 17:44 
Werd´ mal nicht so sein. :wink:
  • Registry-Autostart, wobei als Ergänzung nochmals auf HKEY_CURRENT_USER hingewiesen sei. Dazu müsstest du in Tinos Code die Variable "aPrivate" auf TRUE setzen, dann wird der Eintrag unter HKCU angelegt. Gründe, warum´s in HKLM evtl. nicht funktioniert bzw. wann das besser ist, habe ich genannt. DeCodeGuru hat´s noch mal zusammengefasst.

  • Autostart über das Startmenü. Am Ende des Beitrags findest du einen Beispielaufruf von Popov, in dem er den Autostart-Ordner des angemeldeten Benutzers verwendet (CSIDL_STARTUP). Soll dein Programm für alle Benutzer gestartet werden, verwendest du stattdessen CSIDL_COMMON_STARTUP.

Bitte beim nächsten Mal selbst die FAQs durchstöbern. Ich krieg nichts dafür, wenn ich für dich suche oder dir das Denken abnehme. Du willst das in ein Programm schreiben, nicht ich!
hassedelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WIN XP
D7 Enterprise
BeitragVerfasst: Sa 23.08.03 17:59 
:D thx. :oops: tschuldiung, dass ich nicht nachgeguckt habe. nun könnt ihr euch zur gruppe der delphiforumer zählen, die mich nicht dazu forcen selbst zu suchen. also nochmal vielen dank (auch wenn ich's jetzt doch nicht hinkriege) :wink: !

_________________
you're not be able to help, that you're an human
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Sa 23.08.03 18:32 
Zitat:
auch wenn ich's jetzt doch nicht hinkriege

ajo, dann frag halt nochmal nach. :wink:

_________________
Viele Grüße
Jakob
hassedelphi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WIN XP
D7 Enterprise
BeitragVerfasst: So 24.08.03 11:26 
uhu, danke leute, es funzt :D :D :D

_________________
you're not be able to help, that you're an human