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

Získávame čas běhu počítače v C#

Pokud vás někdy zajímalo jak dlouho vám počítač běží, pak si ukážeme způsob jak tento čas jednoduše zjistit.

Metod na zjištění času spuštění je více. Když jsem vyvíjel WakeWorker, kde tuto možnost používám, setkal jsem se s problémem, že na některém systému fce nefungovali korektně či vůbec.

Tohle je první příklad. Využívá získání informací o systému pomocí WMI. Existuje nástroj WMI Code Creator, kde si naklikáte co chcete zjistit a on vám přímo podobný kód jako je níže vygeneruje. Pozn. pokud se vám nechce hledat přibalil jsem jej ke stažení :) Je třeba přidat referenci System.Manage­ment.

private static DateTime GetUptime()
{
    ManagementObject mo = new ManagementObject(@"\\.\root\cimv2:Win32_OperatingSystem=@");
    return ManagementDateTimeConverter.ToDateTime(mo["LastBootUpTime"].ToString());
}

Tato fce nám vrátí DateTime, kde je uložen čas, kdy jsme spustili počítač. Pokud například na XP nebo starších systémech tato fce nefunguje, lze použít tuto:

private static TimeSpan GetUptimeXP()
{
    PerformanceCounter uptime = new PerformanceCounter("System", "System Up Time");
    uptime.NextValue();
    return TimeSpan.FromSeconds(uptime.NextValue());
}

Tato fce nám však vrátí jak dlouho počítač běží a je v TimeSpanu. Převedeme jej tedy na stejný formát jako u předchozí fce pomocí jednoduchého odečtení DateTime.Now - GetUptimeXP()

Ukážeme si práci s klíčovým slůvkem out a ošetříme kompatibilitu.

public static bool GetPcUptime(out DateTime lastUp)
{
    try
    {
        lastUp = GetUptime();
    }
    catch
    {
        try
        {
            lastUp = DateTime.Now - GetUptimeXP();
        }
        catch
        {
            lastUp = DateTime.Now;
            return false;
        }
    }
    return true;
}

Tyto metody si vložíme do nějaké třídy například UpTime. Nyní si ukážeme jak je použít na nějakém Formu.

Timer myTimer = new Timer();
DateTime lastUp;

public Form1()
{
    InitializeComponent();

    if (!UpTime.GetPcUptime(out lastUp))
        MessageBox.Show("Tato fce není vaším systémem podporována", "UP Time", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);

    myTimer.Interval = 1000;
    myTimer.Tick += new System.EventHandler(myTimer_Tick);
    myTimer.Enabled = true;
}

private void myTimer_Tick (object sender, EventArgs e)
{
    // Rozdíl mezi časem, kdy byl počítač spuštěn a současným časem - získám jak dlouho běží
    TimeSpan upTime = DateTime.Now - lastUp;
    // Výpis času spuštění počítače a čas jeho běhu
    myLabel.Text = lastUp.ToString("dd.MM.yyyy   H:mm:ss") + "\n" + upTime.TotalSeconds;
}

Pozn. Povšimněte si, že jsem metodu Show u MessageBoxu dosti protáhnul. Hlavně jsem chtěl Ikonku chyby a aby se zobrazila jako samostatný form a v popředí. Čehož jsem dosáhl pomocí MessageBoxIcon.Error a MessageBoxOptions.DefaultDesktopOnly.

Abychom nemuseli na výstup psát upTime.Days, Hours etc. vytvoříme si další fci, která za nás TimeSpan zformátuje. A naučíme se pracovat ze StringBuilderem.

Jednoduše si vytvoříme instanci StringBuilderu dáme mu nějakou rozumnou délku a jednoduchými podmínkami přidáváma postupně čas a indikátory dnů, hodin, minut.

public static string ShowTime(TimeSpan time)
{
    StringBuilder sb = new StringBuilder(50);
    if (time.Days > 0) sb.Append(time.Days).Append("d ");
    if ((time.Hours > 0) || (time.Days > 0)) sb.Append(time.Hours).Append("h ");
    if ((time.Minutes > 0) || (time.Hours > 0) || (time.Days > 0)) sb.Append(time.Minutes).Append("m ");
    sb.Append(time.Seconds).Append("s");
    return sb.ToString();
}

Nyní stačí jen do formu přidat nějaký Label a nechat program na něm zobrazovat uptime :)

Ukázka spuštěného programu - Programování služeb ve Windows

 

Stáhnout

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

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

 

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