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
 
MathiasSimmack
(Gast)

n/a Beiträge
 
#14

Re: Programmstart bei Windowsstart festlegen

  Alt 5. Dez 2003, 11: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
 


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 11:51 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