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.Management.
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 StringBuilder
em.
Jednoduše si vytvoříme instanci StringBuilder
u 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

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#