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ískavame čas behu počítača v C #

Ak vás niekedy zaujímalo ako dlho vám počítač beží, potom si ukážeme spôsob ako tento čas jednoducho zistiť.

Metód na zistenie času spustenia je viac. Keď som vyvíjal WakeWorker, kde túto možnosť používam, stretol som sa s problémom, že na niektorom systéme fce nefungovali korektne či vôbec.

Toto je prvý príklad. Využíva získanie informácií o systéme pomocou WMI. Existuje nástroj WMI Code Creator, kde si naklikáte čo chcete zistiť a on vám priamo podobný kód ako je nižšie vygeneruje. Pozn. ak sa vám nechce hľadať pribalil som ho k stiahnutiu :) Je potrebné pridať referenciu System.Manage­ment.

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

Táto fce nám vráti DateTime, kde je uložený čas, kedy sme spustili počítač. Ak napríklad na XP alebo starších systémoch táto fce nefunguje, možno použiť túto:

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

Táto fce nám však vráti ako dlho počítač beží a je v TimeSpanu. Prevedieme ho teda na rovnaký formát ako u predchádzajúcej fce pomocou jednoduchého odpočítaní DateTime.Now - GetUptimeXP()

Ukážeme si prácu s kľúčovým slovkom out a ošetrí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;
}

Tieto metódy si vložíme do nejakej triedy napríklad UpTime. Teraz si ukážeme ako ich použiť na nejakom 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. Všimnite si, že som metódu Show u MessageBox dosť pretiahol. Hlavne som chcel ikonky chyby a aby sa zobrazila ako samostatný form a v popredí. Čoho som dosiahol pomocou MessageBoxIcon.Error a MessageBoxOptions.DefaultDesktopOnly.

Aby sme nemuseli na výstup písať upTime.Days, Hours etc. vytvoríme si ďalšie FCI, ktorá za nás TimeSpan sformátuje. A naučíme sa pracovať zo StringBuilder em.

Jednoducho si vytvoríme inštanciu StringBuilder u dáme mu nejakú rozumnú dĺžku a jednoduchými podmienkami přidáváma postupne čas a indikátory dní, hodín, minút.

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();
}

Teraz stačí len do formu pridať nejaký Label a nechať program na ňom zobrazovať uptime :)

Ukážka spusteného programu - C # - Pre pokročilých

 

Stiahnuť

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

Stiahnuté 428x (162.03 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