Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Programmstart bei Windowsstart festlegen (https://www.delphipraxis.net/12755-programmstart-bei-windowsstart-festlegen.html)

Akut-Programming 5. Dez 2003 08:03

Re: Programmstart bei Windowsstart festlegen
 
Wer hat von den Schweizern abgeschrieben?? :gruebel:

MathiasSimmack 5. Dez 2003 10:30

Re: Programmstart bei Windowsstart festlegen
 
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
Delphi-Quellcode:
Reg.Destroy;

Christian Seehase 5. Dez 2003 11:28

Re: Programmstart bei Windowsstart festlegen
 
Moin Mitternachtsfalke,

was auch noch schiefgehen kann ist das:

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

Delphi-Quellcode:
'"'+Application.ExeName+'"'
oder

Delphi-Quellcode:
'"'+paramstr(0)+'"'

MathiasSimmack 5. Dez 2003 11:33

Re: Programmstart bei Windowsstart festlegen
 
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ß.

Mitternachtsfalke 9. Dez 2003 16:45

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

MathiasSimmack 9. Dez 2003 19:48

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 Hier im Forum suchenIsAdmin von NicoDE suchen:
Zitat:

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 Uhr.
Seite 2 von 2     12   

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