AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Programmstart bei Windowsstart festlegen
Thema durchsuchen
Ansicht
Themen-Optionen

Programmstart bei Windowsstart festlegen

Ein Thema von Mitternachtsfalke · begonnen am 3. Dez 2003 · letzter Beitrag vom 9. Dez 2003
Antwort Antwort
Seite 2 von 2     12   
Akut-Programming

Registriert seit: 18. Aug 2003
648 Beiträge
 
#11

Re: Programmstart bei Windowsstart festlegen

  Alt 5. Dez 2003, 09:03
Wer hat von den Schweizern abgeschrieben??
Akut-Programming
be cool, be hot ... just be
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#12

Re: Programmstart bei Windowsstart festlegen

  Alt 5. Dez 2003, 11:30
Du - in dem anderen Beitrag. Allerdings hast du´s nicht richtig abgeschrieben, denn wie kommst du in der Prozedur "DelAppInRunOnce" (die Namensähnlichkeit zum SwissDelphiCenter is´ sicher nur Zufall ) auf
Reg.Destroy;
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Programmstart bei Windowsstart festlegen

  Alt 5. Dez 2003, 12:28
Moin Mitternachtsfalke,

was auch noch schiefgehen kann ist das:

Application.ExeName Sollte der Pfad Leerzeichen enthalten, wird das Programm auch nicht ausgeführt, also besser

'"'+Application.ExeName+'"' oder

'"'+paramstr(0)+'"'
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#14

Re: Programmstart bei Windowsstart festlegen

  Alt 5. Dez 2003, 12:33
Da toms vom SwissDelphiCenter anwesend ist, hier mal eine Idee zur Diskussion, basierend auf diesem Beitrag. Es bezieht sich zwar mehr auf den Beitrag, den Akut-Programming hervorgekramt hat, aber egal ...

Weil sich Hauptpfad ja nicht ändert (egal ob man in HKCU oder HKLM schreibt), habe ich diesen als globale Konstante abgelegt:
Delphi-Quellcode:
uses
  Registry;

const
  szWinKey = 'Software\Microsoft\Windows\CurrentVersion\';
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:
Delphi-Quellcode:
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;
Beispiele:
Delphi-Quellcode:
// 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
Gruß.
  Mit Zitat antworten Zitat
Benutzerbild von Mitternachtsfalke
Mitternachtsfalke

Registriert seit: 3. Dez 2003
54 Beiträge
 
Delphi 6 Enterprise
 
#15

Re: Programmstart bei Windowsstart festlegen

  Alt 9. Dez 2003, 17:45
Vielleicht etwas dumm dass ich hier nochmal anfange aber
besser als noch ein neues Eintrag zum Thema...


Nur rein des wissens und der Interesse wegen:
(Ich verfolge keine bösen Absichten )

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
Im Falle eines Falles ist richtig fallen alles
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#16

Re: Programmstart bei Windowsstart festlegen

  Alt 9. Dez 2003, 20:48
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 Hier im Forum suchenIsAdmin von NicoDE suchen:
Zitat von MathiasSimmack:
Delphi-Quellcode:
const
  iRegRoots : array[boolean]of HKEY =
    (HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE);

{ ... }

if(DoAppToRun(iRegRoots[IsAdmin], // <-- "IsAdmin" von Nico!
  'Run',
  'MeMyselfAndI',
  Format('"%s"',[paramstr(0)]))) then
ShowMessage('Wert eingetragen!');
Abhängig vom Rückgabewert der Funktion "IsAdmin" (bool-Typ) wird entweder HKCU oder HKLM aus dem Bool-Array benutzt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz