Spuštění programu po startu Windows - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Delphi

Spuštění programu po startu Windows

delphi_onstart

30. března 2001, 00.00 | V tomto článku se podíváme problém, jak zařídit spuštění aplikace automaticky po startu Windows, a ukážeme si dvě funkce, které přesně tohle chování zařizují.

V tomto článku se podíváme na řešení problému, jak zařídit spuštění aplikace automaticky po startu Windows. Výsledkem naší snahy bude funkce, jejíž zavolání v programu zařídí právě toto chování, a funkce, která zase spouštění po startu zruší.

Takže jak na to?

Cesta první

První možností je, že program přidá svého zástupce do nabídky Start/Programy/Po spuštění. Tématem tvoření zástupců a jejich umisťování do různých systémových složek se zabývá článek Jak na zástupce, takže pokud chcete využít tuto možnost, doporučuji si ho přečíst. Snad jen dodám, že název položky v registru obsahující umístění menu Po spuštění je Startup..

Cesta druhá

Druhou (a lepší) možností, jak zajistit spuštění programu po startu Windows je speciální větev registrů HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run. V ní mohou být umístěny položky typu řetězec. Název položek je libovolný a hodnota určuje název spustitelného souboru + případné parametry. Při spouštění systému Windows se všechny položky v této větvi projdou a spustí se jednotlivé programy.

Měl bych asi upřesnit, že obdobná větev existuje i pod HKEY_LOCAL_MACHINE. Rozdíl je v tom, že programy nastavené pod HKEY_LOCAL_MACHINE se spustí při každém spuštění systému, kdežto programy v HKEY_CURRENT_USER jen pro toho uživatele, který byl přihlášen v okamžiku zápisu položky do registrů.

Tak, teď už samotný kód procedury, která zapíše program, který ji obsahuje, do registrů tak, aby byl spouštěn při startu systému. Pokud je parametr AllUsers nastaven na True, nastavení se zapíše pod HKEY_LOCAL_MACHINE, jinak bude zaneseno pod HKEY_CURRENT_USER. Mimochodem - do příkazu uses nezapomeňte před psaním procedury přidat unitu Registry.

procedure SetRunOnStart(AllUsers: Boolean);
var
  Registry: TRegistry;
begin
  Registry := TRegistry.Create;
  with Registry do
  try
    if AllUsers then
      RootKey := HKEY_LOCAL_MACHINE
    else
      RootKey := HKEY_CURRENT_USER;
    if OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', False) then
      // název položky = titulek aplikace
      // hodnota položky = EXE soubor aplikace včetně cesty
      WriteString(Application.Title, Application.ExeName)
    else
      raise Exception.Create('Chyba při otevírání klíče registrů.');
  finally
    Free;
  end;
end;

Tak, zbývá ještě procedura na odebrání programu ze seznamu spouštěných:

procedure UnsetRunOnStart(AllUsers: Boolean);
var
  Registry: TRegistry;
begin
  Registry := TRegistry.Create;
  with Registry do
  try
    if AllUsers then
      RootKey := HKEY_LOCAL_MACHINE
    else
      RootKey := HKEY_CURRENT_USER;
    if OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', False) then
       DeleteValue(Application.Title)
    else
      raise Exception.Create('Chyba při otevírání klíče registrů.');
  finally
    Free;
  end;
end;

Poznámka: Vedle větve registrů HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run existuje i větev HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce, která se od "klasického" Runu liší v tom, že po spuštění programu se odkaz na něj v této větvi smaže. Výsledkem je to, že program je spuštěn jen jedenkrát a to po prvním restartu systému od chvíle jeho záznamu do registrů. Toto chování najde využití u instalačních programů, které potřebují dokončit část instalace po restartu počítače. Typickým příkladem takového instalátoru je třeba instalace MS Internet Exploreru.

Není žádný problém výše uvedené procedury (resp. první z nich, proceduru na mazání v tomto případě nepotřebujeme) upravit na RunOnce a použít stejně dobře jako v případě Run.

Tématické zařazení:

 » Rubriky  » Delphi  

 » Rubriky  » Windows  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: