From 35b8971f10c644e4d2362d997680e201fe3b6e47 Mon Sep 17 00:00:00 2001 From: Chris Kaczor Date: Fri, 2 May 2014 16:55:59 -0400 Subject: [PATCH] Add implementation --- App.config | 18 ++++ App.xaml.cs | 28 +++-- ProcessCpuUsage.cs | 60 +++++++++++ ProcessCpuUsageStatusWindow.csproj | 14 ++- ProcessCpuUsageWatcher.cs | 157 +++++++++++++++++++++++++++++ Properties/Resources.Designer.cs | 88 +++++++++++----- Properties/Resources.resx | 29 +++++- Properties/Settings.Designer.cs | 60 ++++++++--- Properties/Settings.settings | 18 +++- Resources/ApplicationIcon.ico | Bin 0 -> 108046 bytes WindowSource.cs | 113 +++++++++++++++++++++ 11 files changed, 521 insertions(+), 64 deletions(-) create mode 100644 ProcessCpuUsage.cs create mode 100644 ProcessCpuUsageWatcher.cs create mode 100644 Resources/ApplicationIcon.ico create mode 100644 WindowSource.cs diff --git a/App.config b/App.config index 8e15646..3062bfd 100644 --- a/App.config +++ b/App.config @@ -1,6 +1,24 @@  + + +
+ + + + + + 3 + + + 00:00:02 + + + + + + \ No newline at end of file diff --git a/App.xaml.cs b/App.xaml.cs index 33cc881..e755a39 100644 --- a/App.xaml.cs +++ b/App.xaml.cs @@ -1,17 +1,23 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Data; -using System.Linq; -using System.Threading.Tasks; -using System.Windows; +using System.Windows; namespace ProcessCpuUsageStatusWindow { - /// - /// Interaction logic for App.xaml - /// - public partial class App : Application + public partial class App { + private WindowSource _windowSource; + + protected override void OnStartup(StartupEventArgs e) + { + base.OnStartup(e); + + _windowSource = new WindowSource(); + } + + protected override void OnExit(ExitEventArgs e) + { + _windowSource.Dispose(); + + base.OnExit(e); + } } } diff --git a/ProcessCpuUsage.cs b/ProcessCpuUsage.cs new file mode 100644 index 0000000..ba7d664 --- /dev/null +++ b/ProcessCpuUsage.cs @@ -0,0 +1,60 @@ +using System; +using System.Diagnostics; + +namespace ProcessCpuUsageStatusWindow +{ + public class ProcessCpuUsage + { + #region Properties + + public string ProcessName { get; private set; } + public float PercentUsage { get; internal set; } + public DateTime LastFound { get; set; } + public bool UsageValid { get; private set; } + + internal CounterSample LastSample { get; set; } + + #endregion + + #region Constructor + + internal ProcessCpuUsage(InstanceData instanceData) + : this(instanceData, DateTime.MinValue) + { } + + internal ProcessCpuUsage(InstanceData instanceData, DateTime timestamp) + { + // Store the process details + ProcessName = instanceData.InstanceName; + + // Store the initial data + LastFound = timestamp; + LastSample = instanceData.Sample; + + // We start out as not valid + UsageValid = false; + } + + #endregion + + #region Usage update + + internal void UpdateCpuUsage(InstanceData instanceData, DateTime timestamp) + { + // Get the new sample + var newSample = instanceData.Sample; + + // Calculate percent usage + PercentUsage = CounterSample.Calculate(LastSample, newSample) / Environment.ProcessorCount; + + // Update the last sample and timestmap + LastSample = newSample; + LastFound = timestamp; + + // Usage is now valid + UsageValid = true; + } + + #endregion + } +} diff --git a/ProcessCpuUsageStatusWindow.csproj b/ProcessCpuUsageStatusWindow.csproj index 2e6de5d..56e11c8 100644 --- a/ProcessCpuUsageStatusWindow.csproj +++ b/ProcessCpuUsageStatusWindow.csproj @@ -34,13 +34,13 @@ 4 + + ..\FloatingStatusWindowLibrary\FloatingStatusWindowLibrary\bin\Debug\FloatingStatusWindowLibrary.dll + - + - - - 4.0 @@ -57,8 +57,11 @@ App.xaml Code + + + Code @@ -85,6 +88,9 @@ + + + + @@ -68,9 +69,10 @@ - + + @@ -85,9 +87,10 @@ - + + @@ -109,9 +112,25 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\ApplicationIcon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + CPU: {0,4:f1}% - Total + + + + + + Loading... + + + CPU: {1,4:f1}% - {0} + \ No newline at end of file diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs index 5eeb11c..6e0bde0 100644 --- a/Properties/Settings.Designer.cs +++ b/Properties/Settings.Designer.cs @@ -8,23 +8,55 @@ // //------------------------------------------------------------------------------ -namespace ProcessCpuUsageStatusWindow.Properties -{ - - +namespace ProcessCpuUsageStatusWindow.Properties { + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - - private static Settings defaultInstance = ((Settings) (global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { return defaultInstance; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("3")] + public int ProcessCount { + get { + return ((int)(this["ProcessCount"])); + } + set { + this["ProcessCount"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("00:00:02")] + public global::System.TimeSpan UpdateInterval { + get { + return ((global::System.TimeSpan)(this["UpdateInterval"])); + } + set { + this["UpdateInterval"] = value; + } + } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string WindowSettings { + get { + return ((string)(this["WindowSettings"])); + } + set { + this["WindowSettings"] = value; + } + } } } diff --git a/Properties/Settings.settings b/Properties/Settings.settings index 033d7a5..af8bde6 100644 --- a/Properties/Settings.settings +++ b/Properties/Settings.settings @@ -1,7 +1,15 @@  - - - - - + + + + + 3 + + + 00:00:02 + + + + + \ No newline at end of file diff --git a/Resources/ApplicationIcon.ico b/Resources/ApplicationIcon.ico new file mode 100644 index 0000000000000000000000000000000000000000..20d66ebae8a4674fc844b5b9831f538a1ea4d364 GIT binary patch literal 108046 zcmeFa2V7LivM^pC%BY~AqL>jADz2iK))i1x%mGDLOt>O~t~iJSYhnG00O$w-EM6=q4+F>;2_PrOFDHutEFS|PBf~G(3j_3z2auK)l##Y}BEYzD z{PGJdXG{i=kl>f)uxvCHusv)JXds8QPo|Of_~jR)01_2RdxA2yt*=Vj6O?HH<9Cww z_~m5mU*vw$9=}Y(^7SL6J$_ktD1fy#fVem*gSd@7K$qTN`!XQ64)Oa3+n0eCvjKcm zgaqx&fbJxKeJBuq`&f^BBN;-1_GN%M9OY#zBxqj-g0cOUM?!-3ksjsc;e!0IaTSaV zj6x`9D&W0*KQQ=+3u3!z+y7-_qzx*7FO{{_&x$ckvsVz;ZIG_u$svmz$?<5n9%=-K!`~1Fk&!a ze6OA~Pin2KzF$w>9HBP0`aV7B16BPUdK1E#Uv2!Qf1<{N9i@?K5=@MZjZK)qze5uf zD?0FTm{x*Hy0J0lSfmG{RwgFKbYmvPglT1LjKBP9CX=dXnlO=_009|Lypa=jhF?!| zNW$ZHgK#i0K@j$n)YA~t*ow~>i%eq^>^kWr20pzB${Gb`Y+{8utR|hr&Itxt6mJKi z6av->Xz?)+)YC}4iIuSx`5h#so&oFtHYkb-GQe(8Y>_XEUyJls{CcXIBK=Y+7-OtQ z{!9}-U(zTKQCQa4I2q?bdeUXW6~Uy2S#Vg&JtaWAKNGxfmNn0s*-ARaV)kR9 zm2{bh^fV?5TgUz}yGa|Qf8DGuo++X;$)FSYknUsi1G>~bu&f8VS!V|jPKK0*w@-ep zdG+{aAeQyjZfvC$B{A4O0kf>|j;se*$dzY3z-u)fz!#NIKRDd216HJNfT=q$pvxSf z7-0K^n)Hju8t7*+>jzi^X``W#@=IsfoY0^!DFE!5jB26(KA^C z13Z)~zuubQF?l#Zv>#U@J>CofFnOi}NI1aiCfIlfSih9&0coB!aF%KpF}s+E$0PKj z=SBJNG+~V6!y_r)AStm3|Jj6|j66cDuaheVmUi%8@Rp?XdR23w|@r5I2sEb@Th2oYR9nkiK&z`$lnJ;eg)5$Sh& z(g3pLzq7~!>q(QQRKr+BkWs>ddSt;P5}|6bf28wxchmq=EdY&A&uPNxg#|J8J~fbKs{MWgxs z7v%|3fyE^{P)-3vDe)0O5^;Vnr3i#j&R9zlO!>n?2_MU34F3Hfhin&P)FSLb1g~f} z@)Iim?S+Ar2tm7&O7M!=|8_f*hOaiZ`p1AOnJB40feDcHrwZgjCU{KfUsE7&)We94 z)9fGMs5HsEY4s;Kg^mWtAMueDVhiv^jrrBcnJ`C-&4k84kcp|40WsHTCdB437A1BI z!f_r%(~Brf8Zl=0RuX}e=~-Z&A)G(i5;%gHEQ*3yMx+gFg~CTp0|b*`kf{p|1Omsd z5!($x7*WHMIfV}=1`2`lHS`yJG+YP+A~jYQxtNmqj4~$>$`97eF5bWw{@5Ck7)rF> z)Y_CqB#ILQX%FoRBw(@5n&2eP#Ft@^Pxo~qWY$?Gv%8MpAF5HbN64Iob`P@)O&bQm zr$Rli6?y5lc2R>s;1qrxi-(-Co5;SEhXUoptp=C_^*A-+&6*DIx>39|K6{*dOsw(3 zBNjzBF{CbH1$Jd%puU?j0uY}^9+jmg)boVq0NOSf&I<796g~pFtSC4(LiodZ6YM$i zVfCAk8I_t$i6LW*6D-~jHff4bVx?di;iCzRg11t9@PYyX3}i~iI>aPbau38H!9Zj| zI8c?C3h=Rp@F9ViTSQ!gk1mZrUex1{!)n@1@u3<=7>ihlYKTi zMvXp?$!rra5F`j^{Sii0{Q>V=s{hFnUoL`~40R}$8T>WyXPnJQxefIyNuyECl9Yj$ zf1Fk!9ykL;id`_RFF#cb#Tzpcr*h8|;tvBt))heaW34~eSjS2;IGZWWn6dnO0F+Mz2tbuLkh;&rONpJQ|Vw?kVa2O;~eoBXyIZO z^p#@w&+|^ zEl>&FEV`%~RnJ!kSWh!SyNRz=h{9lC2PhRov;fMCNQCgiKssqkNsKrFu~iIw{{u}> zLI5RD8mYoS74Sm)lbtkJ^VccWbU(hPpTQL8U}ZE9*8oOUT;u@vOfW9SIQX2)2w~y7fk7T_@?i55ykhp>d(Kg4 zUj#^WE#ZrSMwBjt%3>a;Q!C7i(v5MH@F~O!GQaVkXIx{MAQKD&$O+#U@+6RFh*T2| zj-!Zq#A#*LqF0H6lWD8F9+e%U(PF8IsL35^8x?H%;&jt3S&$Gr3-GjS^iEgmSDKj6||zGAEJ9Nd+SVqY&;FQ-KI>Fc2L! zsK;>cc=__>uv2jn>{!1Vq%W)kwauGh)220fs;dp0PjUrwb91hd6E`n##k`lhE4=b_12^{<;OXH7&tI^?)6)~!UN7M#`z5@>=;h@N z-rnBe_wpI|`>^4azYhfZxZJQnp6Cb_$1YgMG20&pN2XfNFp)ex^$}$6?G%F0MQeC0`jR#a^ctLHJH#Ft=K<(QAXvp=4 z=0Xls=7d8-ei+mgghOLd1awqHLO^6RL}K)biG$a%2@oC|2Vtpc5T2b2adB~wk`NC` zsR_VMNq~gJWJpd*hFC5aQd3hQD=7i8)8im3EfoshWI%pa5|rh{Ku%T~6lJGD%$scB zzR7~bw|S73{TAYL3Lq`701}FdAr<4>w{M{^HwW?y@}aosE#zR`+oBREDk_4CyjZ9z zjEBY&OpCctUzQ4O?-HT9EE_6HOQ5+t6+TwQ!N;03=&a9x+KOywtjd9^%3^4$DTe0y z66mPSgpc)a;bUVF+OZ!&!6Bk z#@^4Lskv`Z9sI9Nbv1N#>2wV>wSS|B$sA5lUQ=^JQ&V0Zm!q$X`ukr9gtnAWCWi)b zk}(YmqHFw@>FM0OprGXBdjaqH^n=e)S| zgY=+X|AjtqICKst02$!IeMO#hOUN2fbw55pd+~*(#ItuIntB+r+X!P z9Yk_9jXi%&uTQu0!W#%mPD8nI34IVfh_0)vyGvDB>920U$#fk@4< z^E#)ip|(L$L0L&vm9F}2`^pLuf0C#_=j=JU7c#KKk)Z1y)KF4VloS(FP*}3|Ac~K! z`#TFor40u)6>tg$$x#wtz?`#Q2Qi?y)%I*qQdE!>8##QWgu)6nuRyOjZd}us2T^Iq zh9z`Wy3(j&!XsA%9U*-9L4&TlLrqCZNo|FKq{JvOu~CvgZc+2{I(ya&2ZwGsh^DN$ zV~x40hO(NP;>h6=YFzs7eNfZbfdjTgLQ+yeQCSTKPghq1<>KXoWASASl<7NFEtQUF zY*5wEP!I!2r9ArYeE`r6@qq6c^H4O~sPWmJ!#RUX-1$^nhvW4bOJEdbv$M8j` zbCks-6_kUNMk(;S=dY{05`&_mvXc5QFJDE+1X=3pTUhG)2Y#Vf3Ou^gPVJzQ(iROA zbYPs4*vL^{`V!dRV;X9Nc;(6;S8vt!6QW9l8TB74S$YCkU#)yg6W!mD!OWF zN@_~F96NkU6(tn6sHv+fsr;z;qcW17#J7P?=Y-~#RaO)gA$f%cC+LeVQ3|ur3slur zQd8Taszh#6O-&7jsiwYdo0iT=loXv4m|WIUN$3WHF47M^0ZJ);M*~#|y{hs`W#xrG zE?udvuFH25DAJZD{?BZh`$y1YabZo^*epAc_`Jsni@Uk9EW2W7{|@UJ1wLF z&U1LrNItm`sVj>JlZpp{adsO7@>6OJwhU9D<729(%ZUpJD=sQ3z)(nj3MpzNDyqE9 zyo}@(laN7WWwv)*;P3Qd6#bq(dvv|>?s>Src=4j3ps1jzh)+$3@n>q;L~P&cG84%i zi@oE%XhEgcFiWlqeFsIK{D9CG6g-ti7W_bwR~Am{n)9r(lF!9i)*>!)R~-KaRNJB~ z^48FIAw8X*{NRx*A)hwK>1*<$%4c)BtS?u7kZ!)hl&-Xzem0J);U%DN4Kq(!V~1K% zgMKb9{E;i(`^B3#=YQQgcAVLjJ*%Z+VrSW;E6jPtXX7Hz9^})b{E(irM^ob0Uv3cai?Z zw7x!RB0WOM57R1pdgeSYn%ddb_3?>y<5@2Eyg-X7<@xOlQw~IOOS+eT)BUF}iY{99 z_01&$s4OaXy>)TUw3|f}dwP19)+JNBy1F_`o_svd<$A5XbPX4&?ND9g z06NZ}+}GDvG>bHUYd+HT^t4RA+}G3BE}cKCrw8fVKL$nCMk?_K5Z`}npG&CiaGHFO z-OhW8^nKDr?}{of-lph#o;>U6>Fb%5GlvwB0XL|YE0_k<>{M3-s^k$>&*22-g=Du7 zYDxf=m9w+>^gZo;*n!KAay%@fSydWXm#4;mgVh#Ejk~UzhkXwU2;$@gcnIjNFQVip zw-I_IrG9hf&BGKs&|Ys>S9g#DM%8hI2p3ZT+`Hq|(v9HBB7sgCq@eY9vQ zrSs|c(1yT*oz+Mj7Z=J&%6n8Ipr7MXdF$d}-}x*rhjRsvxPPoY&W!mxtC;au7E-2giy8p7cci-TqGB z=SWqcBet}zscsE_4&%~wxfDScnu$S858iyBN_~B^$#eKs@3BCQ4e{d^bDJA~w__rM zlA9=^=Fp}u4?y2d84C7?OHUu6ZwzSaQu{K8;Xnp?1vMaMTytbZrCchJb)R4E z>F)T@7|_|H%O61gYeZPkgPMchCqHWJ<}={U`$N-sGvwiK|IpadX!o&?{wJ#i;)0rj z9_0(@`<{G5Ptmr1XlyJg&dzqT_}FKs_@(JDnb0Qx2l*X5eh2si+0#c}+2+>9hLYUu z>^BjQ?%lm>W3#cVFZnz4dEA%>*&VoG!KTr#f}L${EGr{~xR8Bt|DFTm>fu9&PMx>& zZ|ckY9(`P1xJPA2$A=GM=^t|IBy=XN5G5Npb z+@ruxjNj&b319h%=i&zMu)ULE$BrGacdIHKK5_((uh)QIe)$DXoHzlx+9yEgq%P>` z>A{&ZXW;UgUjeOBIFCN!E9cJRc9b#v_L~V@xpE0EUb+lduUrKs`;(xUeifb8ry<^Y z4aD0hL)1+buwYz;cso@{ytfIG9&Cpc$Gwo|g8pI`^cTBnLBK^2o{;F|1RhUp!3BND=1=Xw!P5y|Jhcb+XOF?t?J>N1;RwDS_b@(!aQ`Q8&-oep zm!E;l6Ibwbd35@N{=UAG15KJ>9_#ea$YOd|$J- zmlybWd!e714c_Q$e#yoZ{ms7K&oO#|FT(t=93J2X0lt_9dcjL?U+{b73*kN-VEc3U z{$=zr2lxj92g?B*4&TT8ngih>SPluJe9PgKZ#fjg(6=0l{$}D=E)2Pj{^T1_8g&JF*g9Ja?wAW7XnR1*cbE($3?_I zSadA%j)9Q41PDt>g{X`yh>3}T1dMUtkdl%D>6j*`q(Mr02BfE_LuP6Ul%lWrT|olmW~V|t`iWE0Ga=(mCM2NmIW_Ao zWaJh=YGE;CWo1ETZXV?3=0b5{F1*bzfENHGtmVIxHCJ>9LpoLjns6 z3#1_YQB*5rXizR}f%vIJdX>uddpER~juDJQc96iUj-@drsssd-B`>ggGp8hOUE zSpxh(ExiqfI3z|(#iTYS8~q^Ynvv3?rOSU(-luo&s#ij&1^qHxFlcOjLoFi@QwziJ zX1!5TN}Za7;@m!^rOTJESb6+KsHZ92)Ha$!kJk#PSOuDz>a#4CZZtAtH+L%0Xp1*$ z9^R+Ca_{jAMy3`Ph?@Tn7w~1;@!F;oKKqLG8B>dm8?<`np_};k`#Qqd)I(F7{=(==q#N<=Q4Ti3yrN>ZD>h(B z2zIjL`TW^&uMuBQThEhi;OJIZWIxkh&=+(ePH&rCUT!zXrL~pLN&me+EViDWK093h zv0Gu~%%X{c&Qw$u&gi`BT5zv@?)6Dm!oT1@+;7S@G_qhP=s$8RcbnNS>xKjvDl1&( z_Pm|#;@mkyt}W0uOOqO~z=ziRjKVEUEyBa~9Nb*&pY&h1M|3y2nbT(4+x4_hlY81} zXW1NgrA7~To&ng_hWim8AK+L$=44sf%6^yGh(6P$sH13_TYt|?xo17^?zX3zW*He0 z{6OPd`;8LF8xpE#P|0)d@9&scRAFz=!=>Wg*8U!=x$k;<$~sH6vplsZ{7v!)ZYOg> zIiaCO24!9S7-qUv$hq|N_w@6y;5w%jSInI)T3KwqfF?*UxRo4^b7#D*0ROsu<;*hl zC=uHJ4>MZv+S#U+70!R@#|uk%q!XQ!#b%au5EPd=m6MP)AHRPlX|uCkGe4fcjvpo@ z{vtU!IzBpsZClh%@H?j2%Tj$Ig?=m2tDbhPtTaCUaFHqJ>XHNFlC#3EO7rXw=t01@Q+Fxv-2v32}F;rCzf|GoeHT`11>50BZM7GLY> zc#H6K*5g(lzX1Vb9%6R3wY9dCl|8iR6bt}qfC}-p_bbu4fVg<=>}+pG%%*qwc{!1h zPL2-RoylKoMM4qhP{Bi|#)pp9ww8BgWjQ%H*^!QqZW!#|vTWHh&7QhH;)gQ}3d)Ld z3kaUm;~NI*yLM`7X=!Pm*0)Wrd0+RQ-;Lj|$xJ6V$43r(c5mOgQ%n1_zJ)~s&U)!t zb9FXnaz7ayrg=U)TOQ&yJ6ePl``X%lZqvFO>OTa(`#|65ub9 z$=MnbsFcA^|Nd?QkKX|v&B7CynDV|#Mfv6b^WRPI*QqMQzIr;pTBk0VG7S!|RfS_) zck64*VCYXMjtNI^#Pr0aQ=cJT)1!n*Q6%Y`K8MjFN3M6DVSjtez_TT*y}<3 zoz>Kul)*5Ccv}@ny0-<=oHZfc^$28n9H-WwS!`T?;yIWfz{|)j2E<;}6 zRVWC&0;X3Pu(j+C{F>ziX1F#rH@Cp`s3opJZvo5Nnp$((+u4DQ-F>jPbHMfHJ$Uc{ z*PV6`;2xeya(Ltfk8rK|@X-@oFFH}{OE>4I;OO!Uo;`EH=myVS-N4n&13Ykz==Jm& zcwy>^Yen{p=Xfs36WnnfNX{mCdwGH<8_y(R^v8822iK2&Y%e^U9JgLSP7OqZj6A`s4!s1gg|NZT_}#Z4`uNf6COfkoE? ziD8f&6AACKBcYP(0=216p(fn}YTmqr>P$A&Wcxx(aTvVDwPSEp3}pBxKy*|z1jWQd zD6SzRFh<4W`J%)`OcNk9nG3PFj*O3ug(O@{M&mj%Iw6U_j*N|gw73{ZMtE96ETkmj zx)RSKr6r6bq#7#@5)|q)3v5?74!ZS*V zki|`b?2J^%N#{Z)u0eA%G9WKA6>_uQKxsbW;~F#z*Pq<1Y{<^e#&u~HrZedxJ^ zgN=i`%?@RGvEgznwy*xZT{-2$%3>lzj@wVncAW4zJmD*g3LvyS+NUVV(1bHFwJ^$jdAI zxa*D^)sW7vH9H($WuS|swpR0wVE_EQ^8u~HD^@7%LN2ZjI)`_yKk+=JC?5kst2MhL zIH+LbtEr{FLV3es#94FTymv}=_FIBgO|WWfpPv-q8T#sIom`=8v;Dl;wYOP#eDG~P z!K<#Xt*yzgtq(jT=%2%Dv>9u^XINJ6w&J|6S*Bmo*9nWxF- z^V1qayVHhGa1y(T)bxy<%tsJhKRNgc2ISgVnvgpL#kv z>Ps=iMEW|1eEV`HBfn1s0UcPS85tpgzUOt$pEolrZM-Ak#7`On>pSX7OEY48ou50C z;N#1F?x2MV;u|z*OlJGCot+OFIc7Aa zA946DgD(jGFJuJfJ>Sm98ydimP6ntHM5*-e?*hrP=PUV8%b_o2IjobxsDkm!cLyR^ z7z|(8>1uNp0$f@JoAFzNJ?iRk5Z#v-kDi2+Cr?s)NO<5AelgJlLps{(=PrPe(FM48 z-WaZ+-TvEemwe=tBh-4YJU@?+AU#gqBZrMh`EJ1m|I*2OLRfsz>lqN z+_-_?6j+0U`AxXTVu2&;J}{l^zz+9~9PZwQdk&bV?05%wi2Fvij~&47z9aRW!M%t0 zt-%v#wC5k;eiBBf$KdqXiP}4Ib#{Wgk6hrf(^I(T{t}$YJ`c4Q-Vk1K#8ux&_@Y{g0 zIQ)(vh6R;L&Jc%oIyWv1_h3RGn;Qky+^0~9dp!-=-cXkp1WmbqP@nr6zY7S0>Kxqj z$q&YF0>YvFT?Dk3M?pk*G`xEek9$AS5P|l37&ikVFovXOK_s5%=iBYL4}|u4EZXhy zakvMRkjS^)6Jvmj_I+APBE;c01BqyxC!#%0Z1gnzb|3@47sw#CcX~8rrX^7}c~*KF zq-SP8Nmex4-D&t;z#Axt&xDw)d`Nnm3yC>-kdA3=ZZV{w?VX-i2wdC)dQ(scDTSr* zrmzGuGqWH&huH2pkcqZB*)J+WJH8BU_~OF1P=<8*1sF?;A-AX$-j?9r5wYKK@2E02 z8uyN3&~}f5_hm`YP?`!K-o-%WyJC1>k^aSI|4_lD?DkHy*IUpAuSOfa9rurjE#6U= zgWn=#Lq~l+bfQh(-cUr@Rt@bRnt|8Z0=1v}pp*LM-~-y`UC`Op^VNP5-$wrrzB_Ps);2KERz2W6 zs7Ag`wVk8V8q%WDJPz=k>EG6ZHdZyHMS8S&ctjcep$>}%QO+Jw4GmFIX$H>P&VS}$ zpl#qBnU?0^;o)qcy6Dec@QA#8897Hf8*G-BS5*}>AhGbv`6TTqkJH)*ROM+RqKeuF zj!+y_RkRyahtM{!r_dEQtBQ{lm*1>^FSsTx>HxwNbrv0na#o$Ec#vYFy?TS1R!~i< z^MOSM_T(N^4YnLOu-hYTDhUCq_XfGhN`O4Em1oNeX7R6BO9v~BXe^LSro#J8O*9e>2sC4WA~8y_$^1Y zcW~C5<(7^aYlGAm#$KPsV4iE4tR8!mYG38ZWo^!Gvs_Er3#NsZQ)aaGWKNl$-uhN2 z>KLj2ZLz+GfyWWEnG?G+rm!Yt^nCjCY5LeUUd!evVu&r#Sb5Rova7S%r;bmbq;Ac? z+E1T~ru6Vy4tNB);NPp6D|a`^*_Go$;1_OOB?%&Y`ovTB2u13{<mWgUeGFaKrBmpSyd&i|5b5=jC&F;qd~z z-95pJ`0_Ba@f*XJIKO+N=^u#SCHi{4M4#R(@b$s(4ACBVh4Z{W#z6l7!TjzA!T9Z9 zRER%>psy|{nE%~iIQr+J@S8v4n=8gSyeRZKl!RJQ=QfhV(3ghubqV_3%42OICOQiJ zY>`l&ir?>LzQpJa@ACs71bt-TNhx3X%Hr_s1^>K7ayG67APyhSXKrtB{5L-4*gK&TxhAtfc6UXW1$bLqbeCXYsj3K2CX%3p|YY3>MM(& zwXP8TRQL^E9XVTpzN&^C{0^@e+8Rorw6YqCt81VF{Z!RBCsx$fL0xS%G}Ki?V?!Or z25K(+*jfW0THix=djtBVnxUh;4L){Y{MZg%U7dVi6|WOeZ@}l?!FjM3KB2z~H=w?H z;Qr43Z<7FjW%HN4+P7r+a`h$q{)o4H-zmnaQ~UNU|F&YuzI_NizEAxR@T2?G_nkVf zK38h)bOC|LL=c%weVILX;?N$VNmd?W0xGA33l*v6Ml<@h^-oVc6N;w7hTv?-)C$ zeq8{EE%?nk26gqlhjgx88-xNJJ9b3J^!MU_e~vsu|8sx0fTDr; z@8DVFOYrySuNT7taKA^e4vdb90?X)oa4qLCwB$U1*1RVepF(?)E3}uqfX_{#@Fq9~ zf)nuDY}`vB>n-wqHg(P}?G0q&`MF$NJH16cpNsk*&zitMYYa4JRO8=b`dd#94(H$L z-xBy&CGd~tF>z5*!b)z|Ec~w%BS(sp!gz`CBmwzZv&N4f$H?0xIGVQ;;z6ivDffyJpRoT8ym1k z{r?!(Ay1w>0q3Vr;bD|JJjK)<&kT6snE}eLi01=1cm^OCeSu+k9y}8LdktJBR3_L% zO`0=wmU=*QaX9ohqYp4T8viawA|xi`-{wHyS_-xIod#)W_h+DupNV_fMCTJ*9$gHS z-mk}fVBUwC-~0b}?r#bFErI_?0;tk}CQNjLl+@S}Bg95wZYpgoUgyh9m69MukeEs( zASH_b&{&yx8PMqvHyvGWFl%&0M6$`eH9&661=K4jP| z2~s^tL|O#P5<Zxe=z)ntMJUBAGX|T)@_@)>O8?Fzog-yI zkfF+?BcsNQ9XnQvD#L6Nuv7T^m-_cV{kvK>cI{9TA2EptM||_9^|+GaD^~LVli<)f z^!fk{r*Ar72rw$1L?MR-qj0Sz1Dn^c-D^_xKH`AQtfb%O@Io%Fuikw?ZU6qx8;NT{ zgvJ!!Y;(wVoac-UyJvbUzJ4@ua&fM?bym+azbp5fA2r|7?v+_ne`dO(|FYsMhsGww zOR7D4F?F)H$S&D=M`VVdcWn&_ZA#`Y7-c-r9aB1UjqJ<-f1iy)x8JeD=FgltGeEX) z;PXJ#fbc0#_j{WEH(WL!>s(k6_4&i}{)$-7JhtD(s&~zjX3+Q`ggX??ik2bR5b{#;#dsNDC~Ke9J42ikTV1k=v_${Citxv*RMdaaBk^Wi~HxAk{t$;i?Z z;gX}mu#8pF(kp=`lp!rrM{}j!R&YBoOnro-;n2h-vUj(59+MEsza|sB^nLeP*7dlT zr%%2q1NuPY!Ly}@R$nq|8mZhHV9=MIqdp|MsvP_LM*RpnAt{fZKxofMt2o7qU_}E__a%wM+cy!9!CB;&4PB)(Rc5zse2a?it8w&%6trTT~`_ok`^o4fEpz>*csJGreY7uASJ&&Oy<5$!% zU(7ZeFTL7IaYMAUgvc-k=icoOA<<9qzm1OWS`pQg{sUv$@n5YJUJun0jlKf+Cmzoi zIxlql$Zs_cljKeTPjVP|?>w+oX8(_gtHw{5VCyk2G%Re>+i{K^pN~q2lsnFl5W2Ql zMD!_BY_Z%4Hf}&#?-bFG5uPR&eW~nSvr{UJTsKt0S6>7+fz6nE!D3H4mngh`f7EV& z(Xw5zaXjc>?k#?I^|69c@wK>O@L8JJA}oEi&3roBb<#2j586QUn;#%Q_v6!L!ZR`t z{LIi_#8|ePxlG1R(&mKBLz%6=Xg`eC9j7|4#%D;zDvQNX(Z6i6I74Xti1py+H_gpZ z+%d2sOuAon`ndNU>~(%AhO6d0=~yVPBC*>_Ay0@d89jIF^SST~7)SP&wjL3pTPYZg zjy?f6`Z~AQ2roA2sk!fYWG(jOr6uR;^pcEI#wVwVXx$#-w)hvJi}LGzeYGB%4ikEs zqWB=Me3#ai8B@jArbxI+Y5&BHS$p9Av0vBTE*NHqE&EQeWdlm{*!zQ21&v_gse zjEv3h;}88*)>E{O7T30QINeM~M#55Pl8cJg_TQ=$3QCVoG%TGL<)I)ARY{|y6ICRy zF`vo`pIzi~jI}~uck!7A!X8Uz#m(5eMC8O6y(QP~j&XI8K6tQrC_`eM41Q%6BWXDU z*IF{dLWv@=GQPIAKGd~s-t<0wdYZVjA;SuMMYL`(kGufp42BZp(te*qAr;Xv=f>>! zUZx;yV~`PW^2u)=);c-htDKVkQPt7!`p6C;hVN?m<6@JAuHsM1I2 zM4Xdl2w!_0cFE^Z8^q36jCudLExbWnZ=rK~hNxtXx%E96cbid0w$>YEoMzlovr(U6 zH~f=vOD(tlpyWE5;xpQNH4Mf*m>TW6J#MfL&EO>m66`U&FP$EAur}M zAO;dIN`DBJy(?DFplP~qvby5tDq^3&tdb1AD{cMD`}1K#Czvbf1lvSctDOJw3`cXJ zh}nz<;*u!~q)aCLyv=ZGSJN-{4)5AmIx4&dtr*R*&hrm1J#l+B=qp|PSnqK`L7$%S zN|R34l3cWKp(k1vGuxe`KF;(U(DrDxC7vR^m)dc9GYjPS~!AMA&UW=OA>kfDkE=rk&J@p@?s znyZB4t>Fm^%`JvJjyQBXLPcx*%7S+@Wp6^bSosNO`4hKo1E(z)Dk&>1jYwY=HMIQ6 zg%w6ZzaG4Q{JvqC`Tb2!(ab%V(Q|{X9*-_65)1*|_%FwsGaVp-G z{7!8i!$$edd(%-e?H`Zss&E{>HRfpAB!;y4+ELr4N!Uvz{XA-K^^BjoQrjaod$dDB$5<5HfoeqE^|eO-6iOx@XQ^={9a=3;6(WQ$(#dfhr55i=Fn zES2X0jK#MlHq<(AO`&r&-K#H|F#!RC+Ey2vKEh~fOm6rud9p5IL zEWg5FMXLX$+kVqEZ&g~SzrNg*=Y242=bFyFhlWJ2mf!8_H_UrySi+`bw1V3z-plN> zWsYsTGNCK=W&bW~vz_#jmUW+#!Y>c4y)S-ep|HddlRzokMTe4`^tB1C&9b%{AVz@w-p&z8eIl@tb^^cx1!AWR~`CgrD_rPo0u5Y?45@tNzWQ14D z1Mv$ZhDdnt8|%GqCXNamBT*Q>4Z$t$j{Wg-!V-@a=7;ebHlP3 z&z6FcNO@h!C51#q#@bi;VZBACU-fMtw_%|7<*UexFNZOVH*wTkt8Opbb|h+ebHidq zmnDfRZZi%r=BOQcohm(KyS&G#gjXWw?QahCY=yOD7dk{X3`AUsZc9HdeywfvxEK}J z@*OLU6GSJ(EvOe(Saoc}&;8LsvWfT1e^|ea6E@27cvIZn$LfzyuSlOD{6fra+vuTk z!yWL|5$TJWW4~7>`?bU#75eeD7PdEzuwT8JF+!ED(698eeVUj2@aLHtDckjvUR~^y z*MBCg6|8>hLs8)AMZcas8`YM*bx~jSipURlj{eq}yFY3Vj>!;Mq>vHP(PJqglPa`W zXVXfZr2~%b<_=5CYWMV?N?7D|wtvd@BXRVRi89G7|7%YkpH|Q}PWokyOXmocUk`a4 zI>de=wN|cr@wT5OAB`Bl)+h6kN~Y!Ub2n>LLgyRIXZTBsH^(~3tS>t~Z>x~Eyoz?_ zf$J+E-X1V(e%bB&yUaCK&fmLEKB#v!Faj@*aK6pWi~ZT4B4qkT zv%r&U_kzWn)pDb^UB3U!X4BA-A}y;JlV)s^+?!#nYw<~Jl8pQqI8h?DaBTgo4L?rO zQk?SaQm;_i<&HC(9!kw$wffdn#mCznR~Zg-+97)D)-75bZ5`d2=J-&t=HTd>!%=Cg zwejAqB}Ifl*kx-Ju$$r}w-Nfi)G?m1{pFO*F z^+#;)_q!?e(Yw3NME7*m8MKtFs@igoxv9IfySHy$kIAciReY~;S$BT8 zM@c9?J~NI<`8fWv(P15=iwbOm|UoKq=^9v9EybYzh{|AMP$JgXooRGVkp5r)qHrr&h=EPVkFajD@ zSA}zrmQ`G-S>(9tME;v`GscPix~Tcdo}PtEbyLa6V9KCx35)o!fL?`V|a+;4?fjIApkXFAQ6+x~Or zh#zm*mWDks6s{?KH+8buu(7|1ZoaE4`=ft2V-nO#%&zHOKW=ErzP_4>-d{(7M`#v%4nk9dV{sMd9J$hJ({I$EthVY`!k9QGO>e z?c8a-x~=vzhpTh9%?s4PmGNz$eYm=xx96O=jQh1YCq8{PJo$;`V4fb+H9fFB>|NBA zv&PHe{hprDBWI}z)7*oqR*m;l|IuCC^6rq~LS}yJ?DEg~`P!L>Pc1#XrA|vdO+)VF zrhVhi*rp!Kq)Dl9S6$Sc@$2%DBaUWF$E9JZeh`48p_rBG#i~0iPK_)#*dig)q&e>` zEvMFLNurFj`7dIVM8*!$(z=``-gfR;vXH&AhHqbF`_3T`tjxzvF0EeU{`tX}4_Y;E zQWKRg%jQ*Y^u0D)i#=@V(-Ye^smENCIk(>FhGO)h@N6HMk(PJQIKRwvn}LshX=58@lvo%et^&LAdAb$GEBS#|&xvY6&eY@q9RZK1!TI}{>ov7;`X}=@B zyUMe4y+7xq_}=-Z2}d=jWydZYp7P%EveDe`0nf`U&V{8kO~b_})SozH@0!0MtTe;h z!mEFn=ZeE464EPcTl-sDb(X;>>+<$hqq%A3^5IukP8lyN^5oDO_3qdEJ`_F+9OYoYz)`CEr^HoD z9zJxFq$x&B1F55r_D?kV%pK6RdA6Fn%T}H4##Mf~J-=#i|A7(}C7tvG!h7sZC(*#J zXSjw;`9WB3XVYpuFFX0J*fHrE$yp~q-M`$Y*WImyFTLS!dQ-L4pPWmP);FUs5~0lq z&zznr#oAw8@W!s#RJul#v10nDjtvt|PD*D)y&N9ZcUAgzQj(+lXE`&*kOr>~uOlm7 z7EiRjo{?5vFE?U_JNve9_3j&|Aow6YBla?4`O;bEltz?13)B*O_&Pz}<${poy!wrd zowNINW9LUp&Qpd%rBkf8r|fMW4x+pJjjwh;U-O$#^Md)?&j~AnN3CbReev&M7Bz6Ns{Y1V^9p~L)*gr-IP^k&srEB8r2AGJfoTQNF~{zhT= z&+~`){2a_a&zx%8J|w#Hjskq#W0`AYa(nf_>b1i%51p*$ZjrK7SKQFBpe05AmaOqo z-E670nC#h8P8_(dv$Xxx46nyG;|;{TFRbd;7AfC|(%S82zw_o|?PJo`qIAupN4JcX z9U&4l9u~+gIhmXOlTJ<7^nE=+*C)PKoA=`#=vyy)ukmLGXJ*BRNy400OQl`zhIdTg z7Am4>KKg-(MWIfVsIZ8e-fg*4(U$P?vnhlO-F0p&Dvvy9lioo4pk1brxL-%dOPD!% zz&UK!(;A_b3wrycP6WR_*E{;fXK3rHrHN=oyj=`74N1No%0Dd7GUXoKM^9_3dTDQZ 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 literal 0 HcmV?d00001 diff --git a/WindowSource.cs b/WindowSource.cs new file mode 100644 index 0000000..e2137dd --- /dev/null +++ b/WindowSource.cs @@ -0,0 +1,113 @@ +using FloatingStatusWindowLibrary; +using ProcessCpuUsageStatusWindow.Properties; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ProcessCpuUsageStatusWindow +{ + public class WindowSource : IWindowSource, IDisposable + { + private readonly FloatingStatusWindow _floatingStatusWindow; + private readonly ProcessCpuUsageWatcher _processCpuUsageWatcher; + + internal WindowSource() + { + _floatingStatusWindow = new FloatingStatusWindow(this); + _floatingStatusWindow.SetText(Resources.Loading); + + _processCpuUsageWatcher = new ProcessCpuUsageWatcher(); + _processCpuUsageWatcher.Initialize(Settings.Default.UpdateInterval, UpdateDisplay); + } + + public void Dispose() + { + _processCpuUsageWatcher.Terminate(); + + _floatingStatusWindow.Save(); + _floatingStatusWindow.Dispose(); + } + + public string Name + { + get { return "Process CPU Usage"; } + } + + public System.Drawing.Icon Icon + { + get { return Resources.ApplicationIcon; } + } + + public string WindowSettings + { + get + { + return Settings.Default.WindowSettings; + } + set + { + Settings.Default.WindowSettings = value; + Settings.Default.Save(); + } + } + + #region Display updating + + private static class PredefinedProcessName + { + public const string Total = "_Total"; + public const string Idle = "Idle"; + } + + private void UpdateDisplay(Dictionary currentProcessList) + { + // Filter the process list to valid ones and exclude the idle and total values + var validProcessList = (currentProcessList.Values.Where( + process => + process.UsageValid && process.ProcessName != PredefinedProcessName.Total && + process.ProcessName != PredefinedProcessName.Idle)).ToList(); + + // Calculate the total usage by adding up all the processes we know about + var totalUsage = validProcessList.Sum(process => process.PercentUsage); + + // Sort the process list by usage and take only the top few + var sortedProcessList = (validProcessList.OrderByDescending(process => process.PercentUsage)).Take(Settings.Default.ProcessCount); + + // Create a new string builder + var stringBuilder = new StringBuilder(); + + // Add the header line (if any) + if (Resources.HeaderLine.Length > 0) + { + stringBuilder.AppendFormat(Resources.HeaderLine, totalUsage); + stringBuilder.AppendLine(); + stringBuilder.AppendLine(); + } + + // Loop over all processes in the sorted list + foreach (ProcessCpuUsage processCpuUsage in sortedProcessList) + { + // Move to the next line if it isn't the first line + if (stringBuilder.Length != 0) + stringBuilder.AppendLine(); + + // Format the process information into a string to display + stringBuilder.AppendFormat(Resources.ProcessLine, processCpuUsage.ProcessName, processCpuUsage.PercentUsage); + } + + // Add the footer line (if any) + if (Resources.FooterLine.Length > 0) + { + stringBuilder.AppendLine(); + stringBuilder.AppendLine(); + stringBuilder.AppendFormat(Resources.FooterLine, totalUsage); + } + + // Update the window with the text + _floatingStatusWindow.SetText(stringBuilder.ToString()); + } + + #endregion + } +}