IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Spouštění programů po startu v C#

Jistě vás napadlo, že by bylo hustodémonsky­megapřísné, kdyby se váš program spouštěl po startu. Né takové to přesunutí do šložky po spuštění ale přívětivý checkbox, který by toto nastavoval.

V registrech regedit.exe můžete najít pod HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run jednotlivé klíče, které udávají cestu ke spustitelnému souboru, který se má automaticky spustit po startu. Nepůjde tedy o nic jiného než o práci s registry :)

Vytvoříme si tedy nový projekt. A do formuláře vložíme checkbox s nějakým rozumným popiskem a přidáme mu event CheckedChanged.

Nyní si vytvoříme třídu RegistryManager.

Přidáme using Microsoft.Win32; A deklarujeme třídní proměnnou pro přístup k programům spouštějícím se po startu.

static RegistryKey onStartup = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

Nyní si vytvoříme metodu na nastavení/odstra­nění spouštění programu po startu.

using System.Windows.Forms;

public static void SetOnStartup(bool run)
{
    if (run == true)
        rkApp.SetValue("MojeAplikace", Application.ExecutablePath.ToString());
    else
        rkApp.DeleteValue("MojeAplikace", false);
}

Pokud je proměnná run == true.
Nastaví se do registrů klíč s názvem "MojeAplikace" pozn. lze použít i Application.ProductName, což vrátí název aplikace nastavení v Properties\AssemblyInfo.cs.

Jinak
Tuto hodnotu smaže. Druhý parametr (v našem případě false) určuje, zda má být při chybě v mazání (klíč neexistuje) vyhozena vyjímka. Což my nepotřebujeme.

Nyní do události CheckedChanged našeho checkboxu přidáme pouze:

RegistryManager.SetOnStartup(runOnStartup.Checked);

Nyní se zdá být program hotov. Jistě vás ale napadne, jak pak automaticky zaškrtnout checkbox. Ukládat do souboru by šlo, ovšem co kdyby uživatel klíč z registru smazal manuálně? Proto je lepší vytvořit si na to další metodu, která se podívá zda klíč v registrech existuje.

Přidáme tedy další metodu do RegistryManager něco jako IsOnStartup. A jen jednduše:

return (rkApp.GetValue(Application.ProductName) != null);

Asi vás to jen tak netrkne, ale co se stane, když uživatel přesune onen soubor do jiné složky? No vlastěn vůbec nic. A to doslova. Program se prostě nespustí, protože ho systém na dané lokaci nenajde. Což se dá ale jednoduše ošetřit. Vezmeme z registrů tu cestu a podíváme se zda soubor existuje.

Celá metoda pak bude vypadat nějak takto:

public static bool IsOnStartup()
{
    if (rkApp.GetValue(Application.ProductName) == null) return false;

    if (!System.IO.File.Exists(rkApp.GetValue(Application.ProductName).ToString()))
        rkApp.SetValue(Application.ProductName, Application.ExecutablePath.ToString());

    return true;
}

No a tu pak jednoduše zavoláme v konstruktoru Formu.

runOnStartup.Checked = RegistryManager.IsOnStartup();

A jsme u konce. Nyní si to jdeme odzkoušet. Jsem zvědav, kolik z vás, kvůli tomu restartuje počítač :D Já už pouštím Virtual PC, abych příklad odzkoušel :) (nyní jsem vám vnuknul nápad)

Soubory v C# .NET

Ještě přidám menší vsuvku. A to používání parametrů. Pokud budete chtít spustit program například minimalizovaný nebo v tray. Jednoduše do registrů uložte cestu s parametrem např. " -h" jako hidden. "C:\.....\Muj­Program.exe -h"

Všimli jste si, že v konstruktoru programu, tedy v Program.cs je standardně String[] args? Tak teď uvidíte k čemu je to dobré :)

Form1 form = new Form1();

if ((args.Length > 0) && (args[0] == "-h"))
{
    form.WindowState = FormWindowState.Minimized;
}

Application.Run(form);

Případně pokud používáte TrayIkonu, tak můžete i form.ShowInTaskbar = false; Pokud ji zobrazujete manuálně. Pak zkontrolujte v konstruktoru formu FormWindowState a podle toho ji zobrazte. Jednoduché, že? :)


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 558x (39.63 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

Všechny články v sekci
Soubory v C# .NET
Článek pro vás napsal David Jančík
Avatar
Uživatelské hodnocení:
10 hlasů
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity