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í.

Spúšťanie programov po štarte v C #

Iste vás napadlo, že by bolo hustodémonsky­megapřísné, keby sa váš program spúšťal po štarte. Né také to presunie do zložky po spustení ale prívetivý checkbox, ktorý by toto nastavoval.

V registroch regedit.exe môžete nájsť pod HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run jednotlivé kľúče, ktoré udávajú cestu k spustiteľnému súboru, ktorý sa má automaticky spustiť po štarte. Nepôjde teda o nič iné než o prácu s registrami :)

Vytvoríme si teda nový projekt. A do formulára vložíme checkbox s nejakým rozumným popiskom a pridáme mu event CheckedChanged.

Teraz si vytvoríme triedu RegistryManager.

Pridáme using Microsoft.Win32; A deklarujeme triedny premennú pre prístup k programom spúšťajúcim sa po štarte.

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

Teraz si vytvoríme metódu na nastavenie / odstránenie spúšťania programu po štarte.

using System.Windows.Forms;

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

Ak je premenná run == true.
Nastaví sa do registrov kľúč s názvom "MojeAplikace" pozn. možno použiť aj Application.ProductName, čo vráti názov aplikácie nastavenia v Properties\AssemblyInfo.cs.

inak
Túto hodnotu zmaže. Druhý parameter (v našom prípade false) určuje, či má byť pri chybe v mazaní (kľúč neexistuje) vyhodená výnimka. Čo my nepotrebujeme.

Teraz do udalosti CheckedChanged nášho checkboxu pridáme iba:

RegistryManager.SetOnStartup(runOnStartup.Checked);

Teraz sa zdá byť program hotový. Iste vás ale napadne, ako potom automaticky zaškrtnúť checkbox. Ukladať do súboru by šlo, avšak čo keby užívateľ kľúč z registra zmazal ručne? Preto je lepšie vytvoriť si na to ďalšiu metódu, ktorá sa pozrie či kľúč v registroch existuje.

Pridáme teda ďalšiu metódu do RegistryManager niečo ako IsOnStartup. A len jednduše:

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

Asi vás to len tak netrkne, ale čo sa stane, keď používateľ presunie onen súbor do inej zložky? No vlastěn vôbec nič. A to doslova. Program sa jednoducho nespustí, pretože ho systém na danej lokácii nenájde. Čo sa dá ale jednoducho ošetriť. Vezmeme z registrov tú cestu a pozrieme sa či súbor existuje.

Celá metóda potom bude vyzerať nejako 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 tú potom jednoducho zavoláme v konstruktoru Formu.

runOnStartup.Checked = RegistryManager.IsOnStartup();

A sme u konca. Teraz si to ideme odskúšať. Som zvedavý, koľko z vás, kvôli tomu reštartuje počítač : D Ja už púšťam Virtual PC, aby som príklad odskúšal :) (Teraz som vám vnukol nápad)

C # - Pre pokročilých
Ešte pridám menšie vsuvku. A to používanie parametrov. Ak budete chcieť spustiť program napríklad minimalizovaný alebo v tray. Jednoducho do registrov uložte cestu s parametrom napr. "-H" ako hidden. "C: \ ..... \ MujProgram.exe -h"

Všimli ste si, že v konstruktoru programu, teda v Program.cs je štandardne String[] args ? Tak teraz uvidíte na čo je to dobré :)

Form1 form = new Form1();

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

Application.Run(form);

Prípadne ak používate TrayIkonu, tak môžete aj form.ShowInTaskbar = false; Pokiaľ ju zobrazujete manuálne. Potom skontrolujte v konstruktoru formu FormWindowState a podľa toho ju zobrazte. Jednoduché, že? :)


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 555x (39.63 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

 

Všetky články v sekcii
C # - Pre pokročilých
Článok pre vás napísal David Jančík
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity