From 723c8e0993afa0777f1ed0dee8d5020d46971577 Mon Sep 17 00:00:00 2001 From: soruly Date: Mon, 4 Sep 2017 23:35:29 +0800 Subject: [PATCH] Init repo --- Form1.Designer.cs | 247 +++++++++++++++++++++++++++++++ Form1.cs | 180 ++++++++++++++++++++++ Form1.resx | 126 ++++++++++++++++ Program.cs | 20 +++ Properties/AssemblyInfo.cs | 33 +++++ Properties/Resources.Designer.cs | 63 ++++++++ Properties/Resources.resx | 117 +++++++++++++++ Properties/Settings.Designer.cs | 26 ++++ Properties/Settings.settings | 7 + SimpleSerial.csproj | 119 +++++++++++++++ SimpleSerial.sln | 20 +++ 11 files changed, 958 insertions(+) create mode 100755 Form1.Designer.cs create mode 100755 Form1.cs create mode 100755 Form1.resx create mode 100755 Program.cs create mode 100755 Properties/AssemblyInfo.cs create mode 100755 Properties/Resources.Designer.cs create mode 100755 Properties/Resources.resx create mode 100755 Properties/Settings.Designer.cs create mode 100755 Properties/Settings.settings create mode 100755 SimpleSerial.csproj create mode 100755 SimpleSerial.sln diff --git a/Form1.Designer.cs b/Form1.Designer.cs new file mode 100755 index 0000000..2cd2843 --- /dev/null +++ b/Form1.Designer.cs @@ -0,0 +1,247 @@ +namespace SimpleSerial +{ + partial class Form1 + { + /// + /// 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.buttonStart = new System.Windows.Forms.Button(); + this.buttonStop = new System.Windows.Forms.Button(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.serialPort1 = new System.IO.Ports.SerialPort(this.components); + this.buttonReset = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // buttonStart + // + this.buttonStart.Location = new System.Drawing.Point(13, 13); + this.buttonStart.Name = "buttonStart"; + this.buttonStart.Size = new System.Drawing.Size(75, 42); + this.buttonStart.TabIndex = 0; + this.buttonStart.Text = "Start"; + this.buttonStart.UseVisualStyleBackColor = true; + this.buttonStart.Click += new System.EventHandler(this.buttonStart_Click); + // + // buttonStop + // + this.buttonStop.Enabled = false; + this.buttonStop.Location = new System.Drawing.Point(105, 12); + this.buttonStop.Name = "buttonStop"; + this.buttonStop.Size = new System.Drawing.Size(75, 43); + this.buttonStop.TabIndex = 1; + this.buttonStop.Text = "Stop"; + this.buttonStop.UseVisualStyleBackColor = true; + this.buttonStop.Click += new System.EventHandler(this.buttonStop_Click); + // + // textBox1 + // + this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox1.Location = new System.Drawing.Point(0, 0); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.textBox1.Size = new System.Drawing.Size(295, 66); + this.textBox1.TabIndex = 2; + this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress); + // + // serialPort1 + // + this.serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort1_DataReceived); + // + // buttonReset + // + this.buttonReset.Enabled = false; + this.buttonReset.Location = new System.Drawing.Point(200, 13); + this.buttonReset.Name = "buttonReset"; + this.buttonReset.Size = new System.Drawing.Size(80, 42); + this.buttonReset.TabIndex = 3; + this.buttonReset.Text = "Reset"; + this.buttonReset.UseVisualStyleBackColor = true; + this.buttonReset.Click += new System.EventHandler(this.buttonReset_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 67); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(45, 13); + this.label1.TabIndex = 12; + this.label1.Text = "Player 1"; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.IsSplitterFixed = true; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.label8); + this.splitContainer1.Panel1.Controls.Add(this.label7); + this.splitContainer1.Panel1.Controls.Add(this.label6); + this.splitContainer1.Panel1.Controls.Add(this.label5); + this.splitContainer1.Panel1.Controls.Add(this.label4); + this.splitContainer1.Panel1.Controls.Add(this.label3); + this.splitContainer1.Panel1.Controls.Add(this.label2); + this.splitContainer1.Panel1.Controls.Add(this.label1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.textBox1); + this.splitContainer1.Size = new System.Drawing.Size(295, 203); + this.splitContainer1.SplitterDistance = 133; + this.splitContainer1.TabIndex = 13; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(235, 102); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(45, 13); + this.label8.TabIndex = 19; + this.label8.Text = "Player 8"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(235, 68); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(45, 13); + this.label7.TabIndex = 18; + this.label7.Text = "Player 7"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(163, 102); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(45, 13); + this.label6.TabIndex = 17; + this.label6.Text = "Player 6"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(163, 68); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(45, 13); + this.label5.TabIndex = 16; + this.label5.Text = "Player 5"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(81, 102); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(45, 13); + this.label4.TabIndex = 15; + this.label4.Text = "Player 4"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(81, 68); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(45, 13); + this.label3.TabIndex = 14; + this.label3.Text = "Player 3"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(10, 102); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(45, 13); + this.label2.TabIndex = 13; + this.label2.Text = "Player 2"; + // + // timer1 + // + this.timer1.Enabled = true; + this.timer1.Interval = 5000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(295, 203); + this.Controls.Add(this.buttonReset); + this.Controls.Add(this.buttonStop); + this.Controls.Add(this.buttonStart); + this.Controls.Add(this.splitContainer1); + this.MinimizeBox = false; + this.Name = "Form1"; + this.ShowIcon = false; + this.TopMost = true; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.Panel2.PerformLayout(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button buttonStart; + private System.Windows.Forms.Button buttonStop; + private System.Windows.Forms.TextBox textBox1; + private System.IO.Ports.SerialPort serialPort1; + private System.Windows.Forms.Button buttonReset; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Timer timer1; + } +} + diff --git a/Form1.cs b/Form1.cs new file mode 100755 index 0000000..31c648b --- /dev/null +++ b/Form1.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.IO.Ports; +using System.Runtime.InteropServices; + +namespace SimpleSerial +{ + public partial class Form1 : Form + { + + public const int KEYEVENTF_EXTENDEDKEY = 1; + public const int KEYEVENTF_KEYUP = 2; + public const int VK_MEDIA_NEXT_TRACK = 0xB0; + public const int VK_MEDIA_PREV_TRACK = 0xB1; + public const int VK_MEDIA_STOP = 0xB2; + public const int VK_MEDIA_PLAY_PAUSE = 0xB3; + + [DllImport("User32.dll")] + public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo); + + // Add this variable + string RxString; + + public Form1() + { + InitializeComponent(); + } + + private void buttonStart_Click(object sender, EventArgs e) + { + serialPort1.PortName = "COM3"; + serialPort1.BaudRate = 115200; + serialPort1.DataBits = 8; + serialPort1.StopBits = StopBits.One; + serialPort1.Parity = Parity.None; + serialPort1.Handshake = Handshake.None; + + serialPort1.Open(); + if (serialPort1.IsOpen) + { + buttonStart.Enabled = false; + buttonStop.Enabled = true; + textBox1.ReadOnly = false; + buttonReset.Enabled = true; + send_reset(); + reset_ui(); + } + } + + private void buttonStop_Click(object sender, EventArgs e) + { + if (serialPort1.IsOpen) + { + send_reset(); + serialPort1.Close(); + buttonStart.Enabled = true; + buttonStop.Enabled = false; + textBox1.ReadOnly = true; + buttonReset.Enabled = false; + reset_ui(); + } + + } + + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + if (serialPort1.IsOpen) serialPort1.Close(); + } + + private void textBox1_KeyPress(object sender, KeyPressEventArgs e) + { + send_reset(); + + //if(e.KeyChar == 'r') + // keybd_event(VK_MEDIA_NEXT_TRACK, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero); + + e.Handled = true; + } + + private void DisplayText(object sender, EventArgs e) + { + timer1.Start(); + //textBox1.AppendText(RxString); + textBox1.Text = RxString; + int RxInt=Convert.ToByte(RxString); + switch (RxInt) { + case 0: + label1.BackColor = System.Drawing.Color.FromArgb(255, 255, 255, 0); + break; + case 1: + case 11: + label2.BackColor = System.Drawing.Color.FromArgb(255, 255, 255, 0); + break; + case 2: + case 22: + label3.BackColor = System.Drawing.Color.FromArgb(255, 255, 255, 0); + break; + case 3: + case 33: + label4.BackColor = System.Drawing.Color.FromArgb(255, 255, 255, 0); + break; + case 4: + case 44: + label5.BackColor = System.Drawing.Color.FromArgb(255, 255, 255, 0); + break; + case 5: + case 55: + label6.BackColor = System.Drawing.Color.FromArgb(255, 255, 255, 0); + break; + case 6: + case 66: + label7.BackColor = System.Drawing.Color.FromArgb(255, 255, 255, 0); + break; + case 7: + case 77: + label8.BackColor = System.Drawing.Color.FromArgb(255, 255, 255, 0); + break; + default: + break; + + } + + } + private void buttonReset_Click(object sender, EventArgs e) + { + send_reset(); + reset_ui(); + } + + private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) + { + keybd_event(VK_MEDIA_STOP, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero); + RxString = serialPort1.ReadExisting(); + this.Invoke(new EventHandler(DisplayText)); + Console.Beep(3500, 1000); + } + + private void send_reset() + { + // If the port is closed, don't try to send a character. + if (!serialPort1.IsOpen) return; + + // If the port is Open, declare a char[] array with one element. + char[] buff = new char[1]; + + // Load element 0 with the key character. + buff[0] = 'r'; + + // Send the one character buffer. + serialPort1.Write(buff, 0, 1); + } + + private void reset_ui() + { + textBox1.Text = ""; + label1.BackColor = SystemColors.Control; + label2.BackColor = SystemColors.Control; + label3.BackColor = SystemColors.Control; + label4.BackColor = SystemColors.Control; + label5.BackColor = SystemColors.Control; + label6.BackColor = SystemColors.Control; + label7.BackColor = SystemColors.Control; + label8.BackColor = SystemColors.Control; + } + + private void timer1_Tick(object sender, EventArgs e) + { + send_reset(); + reset_ui(); + timer1.Stop(); + } + + + } +} \ No newline at end of file diff --git a/Form1.resx b/Form1.resx new file mode 100755 index 0000000..d8cc5e0 --- /dev/null +++ b/Form1.resx @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 126, 17 + + \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100755 index 0000000..8e3a9be --- /dev/null +++ b/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace SimpleSerial +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100755 index 0000000..9bc9907 --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +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("SimpleSerial")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SimpleSerial")] +[assembly: AssemblyCopyright("Copyright © 2006")] +[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("2b60d4a5-72e9-4b2c-8431-d6a2098ec601")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100755 index 0000000..69b6345 --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.19453 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SimpleSerial.Properties { + using System; + + + /// + /// 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", "4.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 (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SimpleSerial.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/Properties/Resources.resx b/Properties/Resources.resx new file mode 100755 index 0000000..ffecec8 --- /dev/null +++ b/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/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs new file mode 100755 index 0000000..99f5572 --- /dev/null +++ b/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.19453 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SimpleSerial.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.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/Properties/Settings.settings b/Properties/Settings.settings new file mode 100755 index 0000000..abf36c5 --- /dev/null +++ b/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SimpleSerial.csproj b/SimpleSerial.csproj new file mode 100755 index 0000000..41e9528 --- /dev/null +++ b/SimpleSerial.csproj @@ -0,0 +1,119 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {AFA9EE80-6907-40E1-9601-A68E8E745515} + WinExe + Properties + SimpleSerial + SimpleSerial + v2.0 + + + 2.0 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + + + + + + + + Form + + + Form1.cs + + + + + Designer + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/SimpleSerial.sln b/SimpleSerial.sln new file mode 100755 index 0000000..c1b4d62 --- /dev/null +++ b/SimpleSerial.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleSerial", "SimpleSerial.csproj", "{AFA9EE80-6907-40E1-9601-A68E8E745515}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AFA9EE80-6907-40E1-9601-A68E8E745515}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AFA9EE80-6907-40E1-9601-A68E8E745515}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AFA9EE80-6907-40E1-9601-A68E8E745515}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AFA9EE80-6907-40E1-9601-A68E8E745515}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal