![]() |
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 11:13 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