From e73f05b8b2de5485c97a305b4a7e940bb5636f49 Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Sun, 20 Dec 2009 05:40:17 +0000 Subject: [PATCH] Added CPU Usage monitor host app to the LEDNotifier project. --- .../CPUUsageApp/CPUMonitor.Designer.cs | 131 +++++++++++++++++ .../LEDNotifier/CPUUsageApp/CPUMonitor.cs | 113 +++++++++++++++ .../LEDNotifier/CPUUsageApp/CPUMonitor.csproj | 90 ++++++++++++ .../LEDNotifier/CPUUsageApp/CPUMonitor.resx | 132 ++++++++++++++++++ Projects/LEDNotifier/CPUUsageApp/Program.cs | 21 +++ .../CPUUsageApp/Properties/AssemblyInfo.cs | 36 +++++ .../Properties/Resources.Designer.cs | 71 ++++++++++ .../CPUUsageApp/Properties/Resources.resx | 117 ++++++++++++++++ .../Properties/Settings.Designer.cs | 30 ++++ .../CPUUsageApp/Properties/Settings.settings | 7 + .../LEDMixerApp/LEDMixer.Designer.cs | 8 +- 11 files changed, 752 insertions(+), 4 deletions(-) create mode 100644 Projects/LEDNotifier/CPUUsageApp/CPUMonitor.Designer.cs create mode 100644 Projects/LEDNotifier/CPUUsageApp/CPUMonitor.cs create mode 100644 Projects/LEDNotifier/CPUUsageApp/CPUMonitor.csproj create mode 100644 Projects/LEDNotifier/CPUUsageApp/CPUMonitor.resx create mode 100644 Projects/LEDNotifier/CPUUsageApp/Program.cs create mode 100644 Projects/LEDNotifier/CPUUsageApp/Properties/AssemblyInfo.cs create mode 100644 Projects/LEDNotifier/CPUUsageApp/Properties/Resources.Designer.cs create mode 100644 Projects/LEDNotifier/CPUUsageApp/Properties/Resources.resx create mode 100644 Projects/LEDNotifier/CPUUsageApp/Properties/Settings.Designer.cs create mode 100644 Projects/LEDNotifier/CPUUsageApp/Properties/Settings.settings diff --git a/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.Designer.cs b/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.Designer.cs new file mode 100644 index 0000000000..020cda46e0 --- /dev/null +++ b/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.Designer.cs @@ -0,0 +1,131 @@ +namespace CPUMonitor +{ + partial class frmCPU + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.serSerialPort = new System.IO.Ports.SerialPort(this.components); + this.tmrCPUTimer = new System.Windows.Forms.Timer(this.components); + this.cmbComPort = new System.Windows.Forms.ComboBox(); + this.pcCPUUsage = new System.Diagnostics.PerformanceCounter(); + this.lblCPU = new System.Windows.Forms.Label(); + this.nicoNotifyIcon = new System.Windows.Forms.NotifyIcon(this.components); + this.btnMinimizeToTray = new System.Windows.Forms.Button(); + this.btnExit = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.pcCPUUsage)).BeginInit(); + this.SuspendLayout(); + // + // tmrCPUTimer + // + this.tmrCPUTimer.Enabled = true; + this.tmrCPUTimer.Interval = 1000; + this.tmrCPUTimer.Tick += new System.EventHandler(this.tmrCPUTimer_Tick); + // + // cmbComPort + // + this.cmbComPort.FormattingEnabled = true; + this.cmbComPort.Location = new System.Drawing.Point(48, 12); + this.cmbComPort.Name = "cmbComPort"; + this.cmbComPort.Size = new System.Drawing.Size(156, 21); + this.cmbComPort.TabIndex = 0; + this.cmbComPort.SelectedIndexChanged += new System.EventHandler(this.cbPort_SelectedIndexChanged); + // + // pcCPUUsage + // + this.pcCPUUsage.CategoryName = "Processor"; + this.pcCPUUsage.CounterName = "% Processor Time"; + this.pcCPUUsage.InstanceName = "_Total"; + // + // lblCPU + // + this.lblCPU.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.lblCPU.Location = new System.Drawing.Point(44, 36); + this.lblCPU.Name = "lblCPU"; + this.lblCPU.Size = new System.Drawing.Size(160, 28); + this.lblCPU.TabIndex = 1; + this.lblCPU.Text = "0%"; + this.lblCPU.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // nicoNotifyIcon + // + this.nicoNotifyIcon.Text = "CPU Usage Monitor"; + this.nicoNotifyIcon.Visible = true; + // + // btnMinimizeToTray + // + this.btnMinimizeToTray.Location = new System.Drawing.Point(12, 67); + this.btnMinimizeToTray.Name = "btnMinimizeToTray"; + this.btnMinimizeToTray.Size = new System.Drawing.Size(111, 28); + this.btnMinimizeToTray.TabIndex = 2; + this.btnMinimizeToTray.Text = "Minimize to Tray"; + this.btnMinimizeToTray.UseVisualStyleBackColor = true; + this.btnMinimizeToTray.Click += new System.EventHandler(this.btnMinimizeToTray_Click); + // + // btnExit + // + this.btnExit.Location = new System.Drawing.Point(126, 67); + this.btnExit.Name = "btnExit"; + this.btnExit.Size = new System.Drawing.Size(111, 28); + this.btnExit.TabIndex = 3; + this.btnExit.Text = "Exit"; + this.btnExit.UseVisualStyleBackColor = true; + this.btnExit.Click += new System.EventHandler(this.btnExit_Click); + // + // frmCPU + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(249, 106); + this.Controls.Add(this.btnExit); + this.Controls.Add(this.btnMinimizeToTray); + this.Controls.Add(this.lblCPU); + this.Controls.Add(this.cmbComPort); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.Name = "frmCPU"; + this.Text = "CPU Usage Monitor"; + this.WindowState = System.Windows.Forms.FormWindowState.Minimized; + this.Load += new System.EventHandler(this.Form1_Load); + ((System.ComponentModel.ISupportInitialize)(this.pcCPUUsage)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.IO.Ports.SerialPort serSerialPort; + private System.Windows.Forms.Timer tmrCPUTimer; + private System.Windows.Forms.ComboBox cmbComPort; + private System.Diagnostics.PerformanceCounter pcCPUUsage; + private System.Windows.Forms.Label lblCPU; + private System.Windows.Forms.NotifyIcon nicoNotifyIcon; + private System.Windows.Forms.Button btnMinimizeToTray; + private System.Windows.Forms.Button btnExit; + } +} + diff --git a/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.cs b/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.cs new file mode 100644 index 0000000000..4e2a6f9f97 --- /dev/null +++ b/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.cs @@ -0,0 +1,113 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using Microsoft.Win32; + +namespace CPUMonitor +{ + public partial class frmCPU : Form + { + private RegistryKey AppRegKey; + + private const int LIGHT_MAX = 0x1F; + + public frmCPU() + { + InitializeComponent(); + + nicoNotifyIcon.Icon = this.Icon; + nicoNotifyIcon.MouseClick += new MouseEventHandler(TrayIconClick); + } + + private void Form1_Load(object sender, EventArgs e) + { + AppRegKey = Registry.CurrentUser.CreateSubKey("Software\\CPUMonitor"); + + for (int i = 1; i <= 99; i++) + cmbComPort.Items.Add("COM" + i.ToString()); + + cmbComPort.SelectedIndex = System.Convert.ToInt32(AppRegKey.GetValue("Port", "1")) - 1; + serSerialPort.PortName = cmbComPort.Text; + + Hide(); + } + + private void NotifyLight(int Red, int Green, int Blue) + { + byte[] buffer = new byte[3]; + buffer[0] = (byte)(0x80 | (Red & LIGHT_MAX)); + buffer[1] = (byte)(0x40 | (Green & LIGHT_MAX)); + buffer[2] = (byte)(0x20 | (Blue & LIGHT_MAX)); + + try + { + serSerialPort.PortName = cmbComPort.Text; + serSerialPort.Open(); + serSerialPort.Write(buffer, 0, buffer.Length); + serSerialPort.Close(); + } + catch (Exception e) + { + + } + } + + private void tmrCPUTimer_Tick(object sender, EventArgs e) + { + float CPUUsage = pcCPUUsage.NextValue(); + + int Red = 0; + int Green = 0; + int Blue = 0; + + if (CPUUsage < 25) + { + Green = (int)((LIGHT_MAX / 25) * CPUUsage); + } + else if (CPUUsage < 50) + { + Blue = (int)((LIGHT_MAX / 25) * (CPUUsage - 25)); + Green = LIGHT_MAX - Blue; + } + else if (CPUUsage < 75) + { + Red = (int)((LIGHT_MAX / 25) * (CPUUsage - 50)); + Blue = LIGHT_MAX - Red; + } + else + { + Red = LIGHT_MAX; + } + + NotifyLight(Red, Green, Blue); + lblCPU.Text = ((int)CPUUsage).ToString() + "%"; + } + + private void btnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void btnMinimizeToTray_Click(object sender, EventArgs e) + { + this.Hide(); + } + + private void TrayIconClick(object sender, MouseEventArgs e) + { + this.Show(); + this.WindowState = FormWindowState.Normal; + } + + private void cbPort_SelectedIndexChanged(object sender, EventArgs e) + { + AppRegKey.SetValue("Port", cmbComPort.SelectedIndex + 1); + serSerialPort.PortName = cmbComPort.Text; + } + } +} diff --git a/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.csproj b/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.csproj new file mode 100644 index 0000000000..42039033bc --- /dev/null +++ b/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.csproj @@ -0,0 +1,90 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {6040B049-4241-4FFD-B388-AACDA78D1469} + WinExe + Properties + CPUMonitor + CPUMonitor + v3.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + Form + + + CPUMonitor.cs + + + + + CPUMonitor.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + \ No newline at end of file diff --git a/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.resx b/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.resx new file mode 100644 index 0000000000..a4235279a4 --- /dev/null +++ b/Projects/LEDNotifier/CPUUsageApp/CPUMonitor.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 137, 17 + + + 262, 17 + + + 383, 17 + + \ No newline at end of file diff --git a/Projects/LEDNotifier/CPUUsageApp/Program.cs b/Projects/LEDNotifier/CPUUsageApp/Program.cs new file mode 100644 index 0000000000..02d83c2b64 --- /dev/null +++ b/Projects/LEDNotifier/CPUUsageApp/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace CPUMonitor +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new frmCPU()); + } + } +} diff --git a/Projects/LEDNotifier/CPUUsageApp/Properties/AssemblyInfo.cs b/Projects/LEDNotifier/CPUUsageApp/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..f82aa5960a --- /dev/null +++ b/Projects/LEDNotifier/CPUUsageApp/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CPUMonitor")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("CPUMonitor")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3e4a61da-cdde-46de-848b-b5206d225e21")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Projects/LEDNotifier/CPUUsageApp/Properties/Resources.Designer.cs b/Projects/LEDNotifier/CPUUsageApp/Properties/Resources.Designer.cs new file mode 100644 index 0000000000..43ba43ef6d --- /dev/null +++ b/Projects/LEDNotifier/CPUUsageApp/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4927 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CPUMonitor.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CPUMonitor.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Projects/LEDNotifier/CPUUsageApp/Properties/Resources.resx b/Projects/LEDNotifier/CPUUsageApp/Properties/Resources.resx new file mode 100644 index 0000000000..ffecec851a --- /dev/null +++ b/Projects/LEDNotifier/CPUUsageApp/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Projects/LEDNotifier/CPUUsageApp/Properties/Settings.Designer.cs b/Projects/LEDNotifier/CPUUsageApp/Properties/Settings.Designer.cs new file mode 100644 index 0000000000..b9bf6776c2 --- /dev/null +++ b/Projects/LEDNotifier/CPUUsageApp/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4927 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace CPUMonitor.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.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; + } + } + } +} diff --git a/Projects/LEDNotifier/CPUUsageApp/Properties/Settings.settings b/Projects/LEDNotifier/CPUUsageApp/Properties/Settings.settings new file mode 100644 index 0000000000..abf36c5d3d --- /dev/null +++ b/Projects/LEDNotifier/CPUUsageApp/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Projects/LEDNotifier/LEDMixerApp/LEDMixer.Designer.cs b/Projects/LEDNotifier/LEDMixerApp/LEDMixer.Designer.cs index 885db29447..8ed0665f79 100644 --- a/Projects/LEDNotifier/LEDMixerApp/LEDMixer.Designer.cs +++ b/Projects/LEDNotifier/LEDMixerApp/LEDMixer.Designer.cs @@ -92,20 +92,20 @@ // this.lblBlue.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblBlue.Location = new System.Drawing.Point(3, 115); - this.lblBlue.Name = "lblBlue"; + this.lblBlue.Name = "lblGreen"; this.lblBlue.Size = new System.Drawing.Size(50, 27); this.lblBlue.TabIndex = 5; - this.lblBlue.Text = "Blue"; + this.lblBlue.Text = "Green"; this.lblBlue.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // lblGreen // this.lblGreen.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblGreen.Location = new System.Drawing.Point(3, 163); - this.lblGreen.Name = "lblGreen"; + this.lblGreen.Name = "lblBlue"; this.lblGreen.Size = new System.Drawing.Size(50, 25); this.lblGreen.TabIndex = 6; - this.lblGreen.Text = "Green"; + this.lblGreen.Text = "Blue"; this.lblGreen.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // LEDMixer