![]() |
Programmstart bei Windowsstart festlegen
Hi
Ich hab ein Programm geschrieben dass bei jedem Windowsstart automatisch starten soll. Jetzt will ich eine Checkbox machen, wo man festlegen kann, ob dass Prog das nächste Mal startet. Bisher habe ich folgendes:
Delphi-Quellcode:
...so hoffe das stimmt...
if checkbox1.checked then
begin MyReg:=TRegistry.Create; try MyReg.RootKey:=hkey_local_machine; MyReg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run',true); MyReg.WriteString('Wert_egal',Application.ExeName); MyReg.CloseKey; finally MyReg.Free; end; end else begin MyReg.RootKey:=hkey_local_machine; MyReg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', false); if MyReg.ValueExists('Wert_egal') then MyReg.DeleteValue('Wert_egal'); MyReg.CloseKey; end; end; Es sollte ein Wert beim Beenden gespeichert werden, ob die Checkbox ''Checked'' oder ''nicht Checked'' ist. Er müsste dann beim nächsten Start aulgelesen werden. ...denk ich doch Kann mir das einer erklären, wie das zu lösen ist? Gruß MitternachtsFalke [edit=Admin]Delphi-Tags [ delphi]...[ /delphi] eingefügt. Künftig bitte selber dran denken. ;-) Mfg, Daniel[/edit] |
Re: Programmstart bei Windowsstart festlegen
Ein Hallöle von
![]() schreib das einfach in's OnDestroy-Ereignis deines Formulars. Dieses wird bein löschen des Formulars ausgeführt, also wenn das Programm beendet wird.
Delphi-Quellcode:
PS: mit den [delphi]-Tags kann man den QuellCode lesbarer machen.
Procedure TForm_.FormDestroy(Sender: TObject);
Begin If CheckBox1.Checked Then Begin MyReg := TRegistry.Create; Try MyReg.RootKey := hkey_local_machine; MyReg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', True); MyReg.WriteString('Wert_egal', Application.ExeName); MyReg.CloseKey; Finally MyReg.Free; End; End Else Begin MyReg.RootKey := hkey_local_machine; Try MyReg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', False); Ff MyReg.ValueExists('Wert_egal') Then MyReg.DeleteValue('Wert_egal'); MyReg.CloseKey; Finally MyReg.Free; End; End; End; http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() |
Re: Programmstart bei Windowsstart festlegen
Vielen Dank für die schnelle Antwort!
Ich werds mal testen. Doch zu den Close-Prozduren hab ich noch ne kleine Frage... was ist der Unterschied zwischen onClose, onCloseQuery und onDestroy :gruebel: Danke nochmal MitternachtsFalke |
Re: Programmstart bei Windowsstart festlegen
Sollte sich alles mit der Delphi-Hilfe klären lassen.
|
Re: Programmstart bei Windowsstart festlegen
Das hab ich ja schon aber ich hab ne englische version
und noch nichts richtiges gefunden (was nicht heißen soll, dass ich kein Englisch kann), nein ich finde keinen passenden Eintrag. Naja...dann muss ich eben schauen :cry: |
Re: Programmstart bei Windowsstart festlegen
Form auswählen, im OI auf die Ereignisse gehen, in das betreffende Ereigniss rein klicken, F1 drücken. dann kommt so ein text wie dieser zum Beispiel:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Programmstart bei Windowsstart festlegen
Ok Luckie du hast gewonnen.
Ich wusste noch nicht dass man in Delphi irgendwo draufklicken und darüber dann sofort Hilfe erhalten kann. :oops: 'Falke |
Re: Programmstart bei Windowsstart festlegen
Ich habe ein Deja vù:
Zitat:
|
Re: Programmstart bei Windowsstart festlegen
Hatte genau dasselbe in meine Anwendung eingebaut gehabt.. schau dir das mal an, wenn du immernoch nich weiter bist. :wink:
![]() Greetz, |
Re: Programmstart bei Windowsstart festlegen
Also deine Lösung ist auch nicht gerade das Gelbe vom Ei.
Bei den Schweizern, von denen du abgeschrieben hast, sieht das ein bisschen anders (= besser) aus. Ich würd´s sogar noch weiter ausbauen, dass man den Registryschlüssel (HKCU oder HKLM) auch wählen kann. Ich wiederhole mich gern: Admin-Rechte! :) |
Re: Programmstart bei Windowsstart festlegen
Wer hat von den Schweizern abgeschrieben?? :gruebel:
|
Re: Programmstart bei Windowsstart festlegen
Du - in dem anderen
![]()
Delphi-Quellcode:
Reg.Destroy;
|
Re: Programmstart bei Windowsstart festlegen
Moin Mitternachtsfalke,
was auch noch schiefgehen kann ist das:
Delphi-Quellcode:
Sollte der Pfad Leerzeichen enthalten, wird das Programm auch nicht ausgeführt, also besser
Application.ExeName
Delphi-Quellcode:
oder
'"'+Application.ExeName+'"'
Delphi-Quellcode:
'"'+paramstr(0)+'"'
|
Re: Programmstart bei Windowsstart festlegen
Da toms vom SwissDelphiCenter anwesend ist, hier mal eine Idee zur Diskussion, basierend auf diesem
![]() Weil sich Hauptpfad ja nicht ändert (egal ob man in HKCU oder HKLM schreibt), habe ich diesen als globale Konstante abgelegt:
Delphi-Quellcode:
Und hier nun die drei Funktionen. In allen lässt sich der Root, sowie der gewünschte Run-Schlüssel (Run, RunOnce) und natürlich der Name des Wertes festlegen. Die erste Funktion hat logischerweise noch einen vierten Parameter - für das Programm, das eingetragen werden soll:
uses
Registry; const szWinKey = 'Software\Microsoft\Windows\CurrentVersion\';
Delphi-Quellcode:
Beispiele:
function DoAppToRun(const iRegRoot: HKEY;
szRunKey, szRunName, szAppName: string): boolean; var reg : TRegistry; begin Result := false; reg := TRegistry.Create; if(reg <> nil) then with reg do try RootKey := iRegRoot; if(OpenKey(szWinKey + szRunKey,true)) then try WriteString(szRunName,szAppName); // "try/finally/end", weil "WriteString" eine // Exception auslöst, wenn der Wert nicht // geschrieben werden konnte (s. F1) Result := ValueExists(szRunName); finally CloseKey; end; finally Free; end; end; function IsAppInRun(const iRegRoot: HKEY; szRunKey, szRunName: string): boolean; var reg : TRegistry; begin Result := false; reg := TRegistry.Create(KEY_READ); // zum Auslesen kann man die Registry // auch "nur lesend" öffnen if(reg <> nil) then with reg do try RootKey := iRegRoot; if(OpenKey(szWinKey + szRunKey,false)) then try Result := ValueExists(szRunName); finally CloseKey; end; finally Free; end; end; function DelAppFromRun(iRegRoot: HKEY; const szRunKey, szRunName: string): boolean; var reg : TRegistry; begin Result := false; reg := TRegistry.Create; if(reg <> nil) then with reg do try RootKey := iRegRoot; if(OpenKey(szWinKey + szRunKey,false)) then // s. Code vom SwissDelphiCenter; dort wird der // Schlüssel mit "true" geöffnet - also notfalls // angelegt. // Wieso? Der Eintrag soll doch gelöscht werden, // und das ist nur möglich, wenn auch der // Schlüssel existiert. Also: "false" reicht. try if(ValueExists(szRunName)) then Result := DeleteValue(szRunName); finally CloseKey; end; finally Free; end; end;
Delphi-Quellcode:
Gruß.
// Rein, ...
if(DoAppToRun(HKEY_CURRENT_USER, 'Run', 'MeMyselfAndI', Format('"%s"',[paramstr(0)]))) then ShowMessage('Wert eingetragen!'); // ... & raus if(DelAppFromRun(HKEY_CURRENT_USER, 'Run', 'MeMyselfAndI')) then ShowMessage('Wert entfernt'); // und für Besitzer der Kerio PFW unter Win9x if(IsAppInRun(HKEY_LOCAL_MACHINE, 'RunServices', 'PersFw')) then ShowMessage('Eintrag von Kerio PFW gefunden'); // oder als Demo für die Benutzerrechte // (die Funktion "IsAdmin" von NicoDE sollte in // der DP zu finden sein) const iRegRoots : array[boolean]of HKEY = (HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE); { ... } if(DoAppToRun(iRegRoots[IsAdmin], 'Run', 'MeMyselfAndI', Format('"%s"',[paramstr(0)]))) then ShowMessage('Wert eingetragen!'); // hat der User Admin-Rechte, landet der Eintrag // in HKLM, ansonsten in HKCU |
Re: Programmstart bei Windowsstart festlegen
Vielleicht etwas dumm dass ich hier nochmal anfange aber
besser als noch ein neues Eintrag zum Thema... :oops: Nur rein des wissens und der Interesse wegen: (Ich verfolge keine bösen Absichten :angle2:) Was müsste ich denn beachten, wenn ich keine Adminrechte auf einem PC hätte. Oder ist dann ein Eintrag in die Registry nicht möglich? Gruß 'Falke |
Re: Programmstart bei Windowsstart festlegen
Doch, dann legst du den Eintrag eben nicht unter HKEY_LOCAL_MACHINE sondern unter HKEY_CURRENT_USER ab. Beachte dazu bitte den folgenden Auszug aus meinem letzten Posting, das führt dir das ganze ohne eine if-Abfrage vor. Du musst nur mal nach
![]() Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz