diff --git a/src/App.config b/src/App.config
new file mode 100755
index 0000000..5754728
--- /dev/null
+++ b/src/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/ControlCenter.csproj b/src/ControlCenter.csproj
new file mode 100755
index 0000000..6e02fd1
--- /dev/null
+++ b/src/ControlCenter.csproj
@@ -0,0 +1,93 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {1309CB00-06EB-4962-9B20-ADF929B654D7}
+ WinExe
+ ControlCenter
+ ControlCenter
+ v4.7.2
+ 512
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+ Form
+
+
+ Form2.cs
+
+
+
+
+
+ Form1.cs
+
+
+ Form2.cs
+
+
+ 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/src/ControlCenter.sln b/src/ControlCenter.sln
new file mode 100755
index 0000000..b109ff0
--- /dev/null
+++ b/src/ControlCenter.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29519.87
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ControlCenter", "ControlCenter.csproj", "{1309CB00-06EB-4962-9B20-ADF929B654D7}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1309CB00-06EB-4962-9B20-ADF929B654D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1309CB00-06EB-4962-9B20-ADF929B654D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1309CB00-06EB-4962-9B20-ADF929B654D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1309CB00-06EB-4962-9B20-ADF929B654D7}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {E3092B67-350B-48AF-B200-0C20636026AC}
+ EndGlobalSection
+EndGlobal
diff --git a/src/Form1.Designer.cs b/src/Form1.Designer.cs
new file mode 100755
index 0000000..c4c01a9
--- /dev/null
+++ b/src/Form1.Designer.cs
@@ -0,0 +1,190 @@
+namespace ControlCenter
+{
+ 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.pictureBox1 = new System.Windows.Forms.PictureBox();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.button1 = new System.Windows.Forms.Button();
+ this.label1 = new System.Windows.Forms.Label();
+ this.textBox2 = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.textBox3 = new System.Windows.Forms.TextBox();
+ this.button2 = new System.Windows.Forms.Button();
+ this.label3 = new System.Windows.Forms.Label();
+ this.label4 = new System.Windows.Forms.Label();
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // pictureBox1
+ //
+ this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.pictureBox1.BackColor = System.Drawing.SystemColors.ActiveCaption;
+ this.pictureBox1.Location = new System.Drawing.Point(0, 150);
+ this.pictureBox1.Name = "pictureBox1";
+ this.pictureBox1.Size = new System.Drawing.Size(1226, 618);
+ this.pictureBox1.TabIndex = 0;
+ this.pictureBox1.TabStop = false;
+ //
+ // textBox1
+ //
+ this.textBox1.Anchor = System.Windows.Forms.AnchorStyles.Top;
+ this.textBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.textBox1.Location = new System.Drawing.Point(521, 85);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(162, 38);
+ this.textBox1.TabIndex = 1;
+ this.textBox1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // button1
+ //
+ this.button1.Anchor = System.Windows.Forms.AnchorStyles.Top;
+ this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.button1.Location = new System.Drawing.Point(689, 78);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(91, 52);
+ this.button1.TabIndex = 2;
+ this.button1.Text = "Send";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // label1
+ //
+ this.label1.Anchor = System.Windows.Forms.AnchorStyles.Top;
+ this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label1.Location = new System.Drawing.Point(482, 9);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(247, 66);
+ this.label1.TabIndex = 3;
+ this.label1.Text = "Command Center";
+ this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
+ // textBox2
+ //
+ this.textBox2.Anchor = System.Windows.Forms.AnchorStyles.Top;
+ this.textBox2.Location = new System.Drawing.Point(901, 66);
+ this.textBox2.Multiline = true;
+ this.textBox2.Name = "textBox2";
+ this.textBox2.Size = new System.Drawing.Size(312, 78);
+ this.textBox2.TabIndex = 4;
+ this.textBox2.Text = "Make Input Output console here";
+ //
+ // label2
+ //
+ this.label2.Anchor = System.Windows.Forms.AnchorStyles.Top;
+ this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label2.Location = new System.Drawing.Point(415, 80);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(100, 43);
+ this.label2.TabIndex = 5;
+ this.label2.Text = "Enter Command";
+ this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // textBox3
+ //
+ this.textBox3.Anchor = System.Windows.Forms.AnchorStyles.Top;
+ this.textBox3.Location = new System.Drawing.Point(1032, 14);
+ this.textBox3.Name = "textBox3";
+ this.textBox3.Size = new System.Drawing.Size(100, 20);
+ this.textBox3.TabIndex = 6;
+ //
+ // button2
+ //
+ this.button2.Anchor = System.Windows.Forms.AnchorStyles.Top;
+ this.button2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.button2.Location = new System.Drawing.Point(1138, 12);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(75, 23);
+ this.button2.TabIndex = 7;
+ this.button2.Text = "Connect";
+ this.button2.UseVisualStyleBackColor = true;
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
+ // label3
+ //
+ this.label3.Anchor = System.Windows.Forms.AnchorStyles.Top;
+ this.label3.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label3.Location = new System.Drawing.Point(877, 9);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(149, 32);
+ this.label3.TabIndex = 8;
+ this.label3.Text = "IPAddress:Port";
+ this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // label4
+ //
+ this.label4.Anchor = System.Windows.Forms.AnchorStyles.Top;
+ this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.label4.Location = new System.Drawing.Point(1006, 38);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(148, 25);
+ this.label4.TabIndex = 9;
+ this.label4.Text = "Not Connected";
+ this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1225, 766);
+ this.Controls.Add(this.label4);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.button2);
+ this.Controls.Add(this.textBox3);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.textBox2);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.button1);
+ this.Controls.Add(this.textBox1);
+ this.Controls.Add(this.pictureBox1);
+ this.Name = "Form1";
+ this.Text = "Command Center";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
+ this.Load += new System.EventHandler(this.Form1_Load);
+ ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.PictureBox pictureBox1;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox textBox2;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox textBox3;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Label label4;
+ }
+}
\ No newline at end of file
diff --git a/src/Form1.cs b/src/Form1.cs
new file mode 100755
index 0000000..26ff6e5
--- /dev/null
+++ b/src/Form1.cs
@@ -0,0 +1,372 @@
+using Microsoft.Win32;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Net.Sockets;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using KeyboardHook1;
+using Thread = System.Threading.Thread;
+using System.Runtime.InteropServices;
+
+namespace ControlCenter
+{
+ public partial class Form1 : Form
+ {
+ public Form1()
+ {
+ InitializeComponent();
+ }
+
+ public static TcpClient client;
+ byte[] buffer = new byte[1];
+ Timer t = new Timer();
+
+ //KeyboardHook hook = new KeyboardHook();
+ private void Form1_Load(object sender, EventArgs e)
+ {
+
+
+ Form2 f2 = new Form2(this);
+ f2.Show();
+ t.Enabled = true;
+ t.Interval = 1000;
+ t.Tick += (object s, EventArgs eargs) =>
+ {
+ //DisplayAlert("Timer", "Timer Interval", "OK");
+ if (client != null)
+ {
+ if (client.Connected)
+ {
+ if (client.Client.Poll(0, SelectMode.SelectRead))
+ {
+ try
+ {
+ if (client.Client.Receive(buffer, SocketFlags.Peek) == 0)
+ {
+ //DisplayAlert("Client Disconnected", "Client Disconnected", "OK");
+ ClientDisconnected();
+ }
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine("Error while testing connection, restarting...");
+ ClientDisconnected();
+ }
+ }
+ }
+ }
+ };
+
+ t.Start();
+ }
+
+ public void ClientDisconnected()
+ {
+ try
+ {
+ client.Close();
+ client.GetStream().Close();
+ }
+ catch (Exception ex)
+ {
+
+ }
+ t.Stop();
+ Invoke(new Action(() => label4.Text = "Not Connected"));
+ DisconnectionBeep();
+ }
+
+ public void DisconnectionBeep()
+ {
+ Thread thr = new Thread(() => {
+ Thread.Sleep(500);
+ Console.Beep(1200, 250);
+ Console.Beep(1000, 250);
+ Console.Beep(800, 250);
+ });
+ thr.Start();
+ }
+
+
+
+ static string IPstring;
+ static int connectToPort;
+ Image bitmapImage;
+ private void button1_Click(object sender, EventArgs e)
+ {
+ if (textBox1.Text.Length == 0)
+ return;
+
+ SendCommand(textBox1.Text);
+ }
+
+ public void SendCommand(string message)
+ {
+
+ if (message.Length >= 5)
+ {
+ if (message.Substring(0, 4) == "cmd:")
+ {
+ Debug.WriteLine("{cmd}" + message.Substring(4) + "{/cmd}");
+ writeMessage("{cmd}" + message.Substring(4) + "{/cmd}");
+ return;
+ }
+ else if (message.Substring(0, 4) == "key:")
+ {
+ Debug.WriteLine("{key}" + message.Substring(4) + "{/key}");
+ writeMessage("{key}" + message.Substring(4) + "{/key}");
+ return;
+ }
+ else if (message.Substring(0, 4) == "tip:")
+ {
+ Debug.WriteLine("{tip}" + message.Substring(4) + "{/tip}");
+ writeMessage("{tip}" + message.Substring(4) + "{/tip}");
+ }
+ }
+
+ if (!writeMessage(message))
+ {
+ return;
+ }
+ if (message == "{Screenshot}")
+ {
+
+ Debug.WriteLine("Begin Read");
+ var BitmapData = getData(client, 1024 * 128);
+ Debug.WriteLine("End Read");
+
+ MemoryStream ms = new MemoryStream();
+ ms.Write(BitmapData, 0, BitmapData.Length);
+ bitmapImage = new Bitmap(ms, false);
+ ms.Dispose();
+
+ pictureBox1.Image = bitmapImage;
+ }
+ else if (message == "{KillTV}")
+ {
+
+ }
+ }
+
+ private void button2_Click(object sender, EventArgs e)
+ {
+ if (textBox3.Text.Contains(":"))
+ {
+ string[] ConnectionStrings = textBox3.Text.Split(':');
+ IPstring = ConnectionStrings[0];
+ connectToPort = int.Parse(ConnectionStrings[1]);
+
+ client = new TcpClient();
+
+ client = tryConnect().Result;
+
+ if (client == null)
+ {
+ MessageBox.Show("Port Connection Unsuccessful!\nCheck if the host is running, checked the IP Address, and formatted correctly", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ Invoke(new Action(() => label4.Text = "Not Connected"));
+ return;
+ }
+
+ if (client.Connected)
+ {
+ t.Start();
+ label4.Text = "Connected";
+ }
+
+ Debug.WriteLine($"IP: {IPstring} | Port: {connectToPort}");
+ }
+ else
+ {
+ MessageBox.Show("Improper Formatting!", "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+
+ }
+
+
+ public static int tryConnectTime = 1000;
+ public static async Task tryConnect()
+ {
+ try
+ {
+ if (client == null)
+ {
+ client = new TcpClient();
+ }
+
+ var connectionTask = client.ConnectAsync(IPAddress.Parse(IPstring), connectToPort).ContinueWith(task =>
+ {
+ return task.IsFaulted ? null : client;
+ }, TaskContinuationOptions.ExecuteSynchronously);
+ var timeoutTask = Task.Delay(tryConnectTime).ContinueWith(task => null, TaskContinuationOptions.ExecuteSynchronously);
+ var resultTask = Task.WhenAny(connectionTask, timeoutTask).Unwrap();
+ resultTask.Wait();
+ var resultTcpClient = await resultTask;
+
+ return resultTcpClient;
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ Console.ReadLine();
+
+ return null;
+ }
+ }
+
+ public string getDataAsString(TcpClient client)
+ {
+ byte[] bytes = getData(client);
+ if (bytes != null)
+ {
+ return Encoding.ASCII.GetString(bytes);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ public byte[] getData(TcpClient client)
+ {
+ try
+ {
+ NetworkStream stream = client.GetStream();
+ byte[] fileSizeBytes = new byte[4];
+ int bytes = stream.Read(fileSizeBytes, 0, fileSizeBytes.Length);
+ Debug.WriteLine("BYTES TO GET: " + bytes);
+ int dataLength = BitConverter.ToInt32(fileSizeBytes, 0);
+
+ int bytesLeft = dataLength;
+ byte[] data = new byte[dataLength];
+
+ int buffersize = 1024;
+ int bytesRead = 0;
+
+ while (bytesLeft > 0)
+ {
+ int curDataSize = Math.Min(buffersize, bytesLeft);
+ if (client.Available < curDataSize)
+ {
+ curDataSize = client.Available;
+ }
+
+ bytes = stream.Read(data, bytesRead, curDataSize);
+ bytesRead += curDataSize;
+ bytesLeft -= curDataSize;
+ Debug.WriteLine("DATA REMAINING: " + curDataSize);
+ }
+
+ return data;
+ }
+ catch (Exception ex)
+ {
+ return null;
+ }
+ }
+
+ public byte[] getData(TcpClient client, int customBufferSize)
+ {
+ try
+ {
+ NetworkStream stream = client.GetStream();
+ byte[] fileSizeBytes = new byte[4];
+ int bytes = stream.Read(fileSizeBytes, 0, fileSizeBytes.Length);
+ int dataLength = BitConverter.ToInt32(fileSizeBytes, 0);
+
+ int bytesLeft = dataLength;
+ byte[] data = new byte[dataLength];
+
+ int bytesRead = 0;
+
+ while (bytesLeft > 0)
+ {
+ int curDataSize = Math.Min(customBufferSize, bytesLeft);
+ if (client.Available < curDataSize)
+ {
+ curDataSize = client.Available;
+ }
+
+ bytes = stream.Read(data, bytesRead, curDataSize);
+ bytesRead += curDataSize;
+ bytesLeft -= curDataSize;
+ Debug.WriteLine("DATA REMAINING: " + curDataSize);
+ }
+
+ return data;
+ }
+ catch (Exception ex)
+ {
+ return null;
+ }
+ }
+
+ public bool writeMessage(string input)
+ {
+ try
+ {
+ if (client == null)
+ {
+ throw new ObjectDisposedException(client.ToString());
+ }
+ NetworkStream ns = client.GetStream();
+ byte[] message = Encoding.ASCII.GetBytes(input);
+ ns.Write(message, 0, message.Length);
+ return true;
+ }
+ catch (Exception ex)
+ {
+ DisconnectionBeep();
+
+ label4.Text = "Not Connected";
+ return false;
+ }
+ }
+
+ public void sendData(byte[] data)
+ {
+ try
+ {
+ if (client == null)
+ {
+ throw new ObjectDisposedException(client.ToString());
+ }
+ NetworkStream ns = client.GetStream();
+ ns.Write(data, 0, data.Length);
+ }
+ catch (Exception ex)
+ {
+
+ }
+ }
+
+ private void Form1_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ Form2.ShuttingDown();
+
+ Application.Exit();
+ }
+
+ public string getBetween(string strSource, string strStart, string strEnd)
+ {
+ int Start, End;
+ if (strSource.Contains(strStart) && strSource.Contains(strEnd))
+ {
+ Start = strSource.IndexOf(strStart, 0) + strStart.Length;
+ End = strSource.IndexOf(strEnd, Start);
+ return strSource.Substring(Start, End - Start);
+ }
+ else
+ {
+ return "";
+ }
+ }
+ }
+}
diff --git a/src/Form1.resx b/src/Form1.resx
new file mode 100755
index 0000000..29dcb1b
--- /dev/null
+++ b/src/Form1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/src/Form2.Designer.cs b/src/Form2.Designer.cs
new file mode 100755
index 0000000..b12bea1
--- /dev/null
+++ b/src/Form2.Designer.cs
@@ -0,0 +1,216 @@
+namespace ControlCenter
+{
+ partial class Form2
+ {
+ ///
+ /// 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.button1 = new System.Windows.Forms.Button();
+ this.button6 = new System.Windows.Forms.Button();
+ this.button4 = new System.Windows.Forms.Button();
+ this.button2 = new System.Windows.Forms.Button();
+ this.button5 = new System.Windows.Forms.Button();
+ this.button3 = new System.Windows.Forms.Button();
+ this.button7 = new System.Windows.Forms.Button();
+ this.button8 = new System.Windows.Forms.Button();
+ this.button9 = new System.Windows.Forms.Button();
+ this.button10 = new System.Windows.Forms.Button();
+ this.button11 = new System.Windows.Forms.Button();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.SuspendLayout();
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(12, 12);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(111, 32);
+ this.button1.TabIndex = 29;
+ this.button1.Text = "Open TeamViewer";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // button6
+ //
+ this.button6.Location = new System.Drawing.Point(130, 97);
+ this.button6.Name = "button6";
+ this.button6.Size = new System.Drawing.Size(111, 32);
+ this.button6.TabIndex = 28;
+ this.button6.Text = "Lock Keyboard";
+ this.button6.UseVisualStyleBackColor = true;
+ this.button6.Click += new System.EventHandler(this.button6_Click);
+ //
+ // button4
+ //
+ this.button4.Location = new System.Drawing.Point(130, 50);
+ this.button4.Name = "button4";
+ this.button4.Size = new System.Drawing.Size(111, 32);
+ this.button4.TabIndex = 27;
+ this.button4.Text = "Turn Screen Off";
+ this.button4.UseVisualStyleBackColor = true;
+ this.button4.Click += new System.EventHandler(this.button4_Click);
+ //
+ // button2
+ //
+ this.button2.Location = new System.Drawing.Point(130, 12);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(111, 32);
+ this.button2.TabIndex = 26;
+ this.button2.Text = "Close TeamViewer";
+ this.button2.UseVisualStyleBackColor = true;
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
+ // button5
+ //
+ this.button5.Location = new System.Drawing.Point(12, 97);
+ this.button5.Name = "button5";
+ this.button5.Size = new System.Drawing.Size(111, 32);
+ this.button5.TabIndex = 25;
+ this.button5.Text = "Unlock Keyboard";
+ this.button5.UseVisualStyleBackColor = true;
+ this.button5.Click += new System.EventHandler(this.button5_Click);
+ //
+ // button3
+ //
+ this.button3.Location = new System.Drawing.Point(12, 50);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(111, 32);
+ this.button3.TabIndex = 24;
+ this.button3.Text = "Turn Screen On";
+ this.button3.UseVisualStyleBackColor = true;
+ this.button3.Click += new System.EventHandler(this.button3_Click);
+ //
+ // button7
+ //
+ this.button7.Location = new System.Drawing.Point(256, 12);
+ this.button7.Name = "button7";
+ this.button7.Size = new System.Drawing.Size(111, 32);
+ this.button7.TabIndex = 23;
+ this.button7.Text = "Screenshot";
+ this.button7.UseVisualStyleBackColor = true;
+ this.button7.Click += new System.EventHandler(this.button7_Click);
+ //
+ // button8
+ //
+ this.button8.Location = new System.Drawing.Point(12, 144);
+ this.button8.Name = "button8";
+ this.button8.Size = new System.Drawing.Size(111, 32);
+ this.button8.TabIndex = 31;
+ this.button8.Text = "Unblank Screen";
+ this.button8.UseVisualStyleBackColor = true;
+ this.button8.Click += new System.EventHandler(this.button8_Click);
+ //
+ // button9
+ //
+ this.button9.Location = new System.Drawing.Point(130, 144);
+ this.button9.Name = "button9";
+ this.button9.Size = new System.Drawing.Size(111, 32);
+ this.button9.TabIndex = 30;
+ this.button9.Text = "Blank Screen";
+ this.button9.UseVisualStyleBackColor = true;
+ this.button9.Click += new System.EventHandler(this.button9_Click);
+ //
+ // button10
+ //
+ this.button10.Location = new System.Drawing.Point(12, 191);
+ this.button10.Name = "button10";
+ this.button10.Size = new System.Drawing.Size(111, 32);
+ this.button10.TabIndex = 33;
+ this.button10.Text = "Unhide TeamViewer";
+ this.button10.UseVisualStyleBackColor = true;
+ this.button10.Click += new System.EventHandler(this.button10_Click);
+ //
+ // button11
+ //
+ this.button11.Location = new System.Drawing.Point(130, 191);
+ this.button11.Name = "button11";
+ this.button11.Size = new System.Drawing.Size(111, 32);
+ this.button11.TabIndex = 32;
+ this.button11.Text = "Hide TeamViewer";
+ this.button11.UseVisualStyleBackColor = true;
+ this.button11.Click += new System.EventHandler(this.button11_Click);
+ //
+ // textBox1
+ //
+ this.textBox1.Location = new System.Drawing.Point(390, 24);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(129, 20);
+ this.textBox1.TabIndex = 34;
+ this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(387, 8);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(132, 13);
+ this.label1.TabIndex = 35;
+ this.label1.Text = "Default Mouse Control (px)";
+ //
+ // Form2
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.textBox1);
+ this.Controls.Add(this.button10);
+ this.Controls.Add(this.button11);
+ this.Controls.Add(this.button8);
+ this.Controls.Add(this.button9);
+ this.Controls.Add(this.button1);
+ this.Controls.Add(this.button6);
+ this.Controls.Add(this.button4);
+ this.Controls.Add(this.button2);
+ this.Controls.Add(this.button5);
+ this.Controls.Add(this.button3);
+ this.Controls.Add(this.button7);
+ this.Name = "Form2";
+ this.Text = "Button Controller";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form2_FormClosing);
+ this.Load += new System.EventHandler(this.Form2_Load);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Button button6;
+ private System.Windows.Forms.Button button4;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Button button5;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Button button7;
+ private System.Windows.Forms.Button button8;
+ private System.Windows.Forms.Button button9;
+ private System.Windows.Forms.Button button10;
+ private System.Windows.Forms.Button button11;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.Label label1;
+ }
+}
\ No newline at end of file
diff --git a/src/Form2.cs b/src/Form2.cs
new file mode 100755
index 0000000..1c633f5
--- /dev/null
+++ b/src/Form2.cs
@@ -0,0 +1,193 @@
+using KeyboardHook1;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Diagnostics;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace ControlCenter
+{
+ public partial class Form2 : Form
+ {
+ Form1 f1;
+ public Form2(Form1 form1Instance)
+ {
+ f1 = form1Instance;
+ InitializeComponent();
+ }
+
+ public static KeyboardHook hook = new KeyboardHook();
+ private void Form2_Load(object sender, EventArgs e)
+ {
+ hook.KeyDown += Hook_KeyDown;
+ hook.Install();
+ }
+ private void Form2_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ e.Cancel = true;
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ f1.SendCommand("{OpenTV}");
+ Debug.WriteLine("Turning on TeamViewer");
+ }
+
+ private void button2_Click(object sender, EventArgs e)
+ {
+ f1.SendCommand("{KillTV}");
+ Debug.WriteLine("Turning off TeamViewer");
+ }
+
+ private void button3_Click(object sender, EventArgs e)
+ {
+ f1.SendCommand("{ScreenON}");
+ Debug.WriteLine("Turning on Screen");
+ }
+
+ private void button4_Click(object sender, EventArgs e)
+ {
+ f1.SendCommand("{ScreenOFF}");
+ Debug.WriteLine("Turning off Screen");
+
+ }
+
+ private void button5_Click(object sender, EventArgs e)
+ {
+ f1.SendCommand("{UnlockKeyboard}");
+ Debug.WriteLine("Unlocking Keyboard");
+ }
+
+ private void button6_Click(object sender, EventArgs e)
+ {
+ f1.SendCommand("{LockKeyboard}");
+ Debug.WriteLine("Locking Keyboard");
+ }
+
+ private void button7_Click(object sender, EventArgs e)
+ {
+ f1.SendCommand("{Screenshot}");
+ Debug.WriteLine("Taking Screenshot");
+ }
+ private void button8_Click(object sender, EventArgs e)
+ {
+ f1.SendCommand("{UnblankScreen}");
+ Debug.WriteLine("Unblanking Screen");
+ }
+
+ private void button9_Click(object sender, EventArgs e)
+ {
+ f1.SendCommand("{BlankScreen}");
+ Debug.WriteLine("Blanking Screen");
+ }
+
+ public void Hook_KeyUp(KeyboardHook.VKeys key)
+ {
+
+ }
+
+ public static void ShuttingDown()
+ {
+ hook.Uninstall();
+ }
+
+ int MouseSpeed;
+ public void Hook_KeyDown(KeyboardHook.VKeys key)
+ {
+ Debug.WriteLine(key);
+
+ switch (key)
+ {
+
+ case KeyboardHook.VKeys.MULTIPLY:
+
+ f1.SendCommand("{UnlockKeyboard}");
+ Console.Beep(1200, 250);
+
+ break;
+
+ case KeyboardHook.VKeys.SUBTRACT:
+
+ Thread thr = new Thread(() =>
+ {
+ Console.Beep(2000, 250);
+ });
+
+ f1.SendCommand("{LockKeyboard}");
+ thr.Start();
+
+ break;
+
+ case KeyboardHook.VKeys.ADD:
+
+ f1.SendCommand("{ScreenOFF}");
+
+ Console.Beep(650, 250);
+
+ break;
+
+ case KeyboardHook.VKeys.NUMPAD8:
+
+ f1.SendCommand("{moveu}" + MouseSpeed + "{/moveu}");
+
+ break;
+
+ case KeyboardHook.VKeys.NUMPAD2:
+
+ f1.SendCommand("{moved}" + MouseSpeed + "{/moved}");
+
+ break;
+
+ case KeyboardHook.VKeys.NUMPAD4:
+
+ f1.SendCommand("{movel}" + MouseSpeed + "{/movel}");
+
+ break;
+
+ case KeyboardHook.VKeys.NUMPAD6:
+
+ f1.SendCommand("{mover}" + MouseSpeed + "{/mover}");
+
+ break;
+
+ case KeyboardHook.VKeys.NUMPAD5:
+
+ f1.SendCommand("{click}");
+
+ break;
+
+ case KeyboardHook.VKeys.APPS:
+
+ f1.SendCommand("key: ");
+
+ break;
+ }
+
+ }
+
+ private void button10_Click(object sender, EventArgs e)
+ {
+ f1.SendCommand("{ShowTV}");
+ }
+ private void button11_Click(object sender, EventArgs e)
+ {
+ f1.SendCommand("{HideTV}");
+ }
+
+ private void textBox1_TextChanged(object sender, EventArgs e)
+ {
+ try
+ {
+ MouseSpeed = int.Parse(textBox1.Text);
+ }
+ catch (Exception ex)
+ { }
+ }
+ }
+}
diff --git a/src/Form2.resx b/src/Form2.resx
new file mode 100755
index 0000000..29dcb1b
--- /dev/null
+++ b/src/Form2.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/src/KeyboardHook1.cs b/src/KeyboardHook1.cs
new file mode 100755
index 0000000..9d8be71
--- /dev/null
+++ b/src/KeyboardHook1.cs
@@ -0,0 +1,538 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Runtime.InteropServices;
+using System.Diagnostics;
+using System.Windows.Input;
+using System.Security.Permissions;
+
+namespace KeyboardHook1
+{
+
+ ///
+ /// Class for intercepting low level keyboard hooks
+ ///
+ public class KeyboardHook
+ {
+
+ ///
+ /// Virtual Keys
+ ///
+ public enum VKeys//Vkeys //ACTUAL VKEYS, CHANGED OUT FOR UPDATED KEYS
+ {
+ // Losely based on http://www.pinvoke.net/default.aspx/Enums/VK.html
+ LBUTTON = 0x01, // Left mouse button
+ RBUTTON = 0x02, // Right mouse button
+ CANCEL = 0x03, // Control-break processing
+ MBUTTON = 0x04, // Middle mouse button (three-button mouse)
+ XBUTTON1 = 0x05, // Windows 2000/XP: X1 mouse button
+ XBUTTON2 = 0x06, // Windows 2000/XP: X2 mouse button
+ // 0x07 // Undefined
+ BACK = 0x08, // BACKSPACE key
+ TAB = 0x09, // TAB key
+ // 0x0A-0x0B, // Reserved
+ CLEAR = 0x0C, // CLEAR key
+ RETURN = 0x0D, // ENTER key
+ // 0x0E-0x0F, // Undefined
+ SHIFT = 0x10, // SHIFT key
+ CONTROL = 0x11, // CTRL key
+ MENU = 0x12, // ALT key
+ PAUSE = 0x13, // PAUSE key
+ CAPITAL = 0x14, // CAPS LOCK key
+ KANA = 0x15, // Input Method Editor (IME) Kana mode
+ HANGUL = 0x15, // IME Hangul mode
+ // 0x16, // Undefined
+ JUNJA = 0x17, // IME Junja mode
+ FINAL = 0x18, // IME final mode
+ HANJA = 0x19, // IME Hanja mode
+ KANJI = 0x19, // IME Kanji mode
+ // 0x1A, // Undefined
+ ESCAPE = 0x1B, // ESC key
+ CONVERT = 0x1C, // IME convert
+ NONCONVERT = 0x1D, // IME nonconvert
+ ACCEPT = 0x1E, // IME accept
+ MODECHANGE = 0x1F, // IME mode change request
+ SPACE = 0x20, // SPACEBAR
+ PRIOR = 0x21, // PAGE UP key
+ NEXT = 0x22, // PAGE DOWN key
+ END = 0x23, // END key
+ HOME = 0x24, // HOME key
+ LEFT = 0x25, // LEFT ARROW key
+ UP = 0x26, // UP ARROW key
+ RIGHT = 0x27, // RIGHT ARROW key
+ DOWN = 0x28, // DOWN ARROW key
+ SELECT = 0x29, // SELECT key
+ PRINT = 0x2A, // PRINT key
+ EXECUTE = 0x2B, // EXECUTE key
+ SNAPSHOT = 0x2C, // PRINT SCREEN key
+ INSERT = 0x2D, // INS key
+ DELETE = 0x2E, // DEL key
+ HELP = 0x2F, // HELP key
+ KEY_0 = 0x30, // 0 key
+ KEY_1 = 0x31, // 1 key
+ KEY_2 = 0x32, // 2 key
+ KEY_3 = 0x33, // 3 key
+ KEY_4 = 0x34, // 4 key
+ KEY_5 = 0x35, // 5 key
+ KEY_6 = 0x36, // 6 key
+ KEY_7 = 0x37, // 7 key
+ KEY_8 = 0x38, // 8 key
+ KEY_9 = 0x39, // 9 key
+ // 0x3A-0x40, // Undefined
+ KEY_A = 0x41, // A key
+ KEY_B = 0x42, // B key
+ KEY_C = 0x43, // C key
+ KEY_D = 0x44, // D key
+ KEY_E = 0x45, // E key
+ KEY_F = 0x46, // F key
+ KEY_G = 0x47, // G key
+ KEY_H = 0x48, // H key
+ KEY_I = 0x49, // I key
+ KEY_J = 0x4A, // J key
+ KEY_K = 0x4B, // K key
+ KEY_L = 0x4C, // L key
+ KEY_M = 0x4D, // M key
+ KEY_N = 0x4E, // N key
+ KEY_O = 0x4F, // O key
+ KEY_P = 0x50, // P key
+ KEY_Q = 0x51, // Q key
+ KEY_R = 0x52, // R key
+ KEY_S = 0x53, // S key
+ KEY_T = 0x54, // T key
+ KEY_U = 0x55, // U key
+ KEY_V = 0x56, // V key
+ KEY_W = 0x57, // W key
+ KEY_X = 0x58, // X key
+ KEY_Y = 0x59, // Y key
+ KEY_Z = 0x5A, // Z key
+ LWIN = 0x5B, // Left Windows key (Microsoft Natural keyboard)
+ RWIN = 0x5C, // Right Windows key (Natural keyboard)
+ APPS = 0x5D, // Applications key (Natural keyboard)
+ // 0x5E, // Reserved
+ SLEEP = 0x5F, // Computer Sleep key
+ NUMPAD0 = 0x60, // Numeric keypad 0 key
+ NUMPAD1 = 0x61, // Numeric keypad 1 key
+ NUMPAD2 = 0x62, // Numeric keypad 2 key
+ NUMPAD3 = 0x63, // Numeric keypad 3 key
+ NUMPAD4 = 0x64, // Numeric keypad 4 key
+ NUMPAD5 = 0x65, // Numeric keypad 5 key
+ NUMPAD6 = 0x66, // Numeric keypad 6 key
+ NUMPAD7 = 0x67, // Numeric keypad 7 key
+ NUMPAD8 = 0x68, // Numeric keypad 8 key
+ NUMPAD9 = 0x69, // Numeric keypad 9 key
+ MULTIPLY = 0x6A, // Multiply key
+ ADD = 0x6B, // Add key
+ SEPARATOR = 0x6C, // Separator key
+ SUBTRACT = 0x6D, // Subtract key
+ DECIMAL = 0x6E, // Decimal key
+ DIVIDE = 0x6F, // Divide key
+ F1 = 0x70, // F1 key
+ F2 = 0x71, // F2 key
+ F3 = 0x72, // F3 key
+ F4 = 0x73, // F4 key
+ F5 = 0x74, // F5 key
+ F6 = 0x75, // F6 key
+ F7 = 0x76, // F7 key
+ F8 = 0x77, // F8 key
+ F9 = 0x78, // F9 key
+ F10 = 0x79, // F10 key
+ F11 = 0x7A, // F11 key
+ F12 = 0x7B, // F12 key
+ F13 = 0x7C, // F13 key
+ F14 = 0x7D, // F14 key
+ F15 = 0x7E, // F15 key
+ F16 = 0x7F, // F16 key
+ F17 = 0x80, // F17 key
+ F18 = 0x81, // F18 key
+ F19 = 0x82, // F19 key
+ F20 = 0x83, // F20 key
+ F21 = 0x84, // F21 key
+ F22 = 0x85, // F22 key, (PPC only) Key used to lock device.
+ F23 = 0x86, // F23 key
+ F24 = 0x87, // F24 key
+ // 0x88-0X8F, // Unassigned
+ NUMLOCK = 0x90, // NUM LOCK key
+ SCROLL = 0x91, // SCROLL LOCK key
+ // 0x92-0x96, // OEM specific
+ // 0x97-0x9F, // Unassigned
+ LSHIFT = 0xA0, // Left SHIFT key
+ RSHIFT = 0xA1, // Right SHIFT key
+ LCONTROL = 0xA2, // Left CONTROL key
+ RCONTROL = 0xA3, // Right CONTROL key
+ LMENU = 0xA4, // Left MENU key
+ RMENU = 0xA5, // Right MENU key
+ BROWSER_BACK = 0xA6, // Windows 2000/XP: Browser Back key
+ BROWSER_FORWARD = 0xA7, // Windows 2000/XP: Browser Forward key
+ BROWSER_REFRESH = 0xA8, // Windows 2000/XP: Browser Refresh key
+ BROWSER_STOP = 0xA9, // Windows 2000/XP: Browser Stop key
+ BROWSER_SEARCH = 0xAA, // Windows 2000/XP: Browser Search key
+ BROWSER_FAVORITES = 0xAB, // Windows 2000/XP: Browser Favorites key
+ BROWSER_HOME = 0xAC, // Windows 2000/XP: Browser Start and Home key
+ VOLUME_MUTE = 0xAD, // Windows 2000/XP: Volume Mute key
+ VOLUME_DOWN = 0xAE, // Windows 2000/XP: Volume Down key
+ VOLUME_UP = 0xAF, // Windows 2000/XP: Volume Up key
+ MEDIA_NEXT_TRACK = 0xB0,// Windows 2000/XP: Next Track key
+ MEDIA_PREV_TRACK = 0xB1,// Windows 2000/XP: Previous Track key
+ MEDIA_STOP = 0xB2, // Windows 2000/XP: Stop Media key
+ MEDIA_PLAY_PAUSE = 0xB3,// Windows 2000/XP: Play/Pause Media key
+ LAUNCH_MAIL = 0xB4, // Windows 2000/XP: Start Mail key
+ LAUNCH_MEDIA_SELECT = 0xB5, // Windows 2000/XP: Select Media key
+ LAUNCH_APP1 = 0xB6, // Windows 2000/XP: Start Application 1 key
+ LAUNCH_APP2 = 0xB7, // Windows 2000/XP: Start Application 2 key
+ // 0xB8-0xB9, // Reserved
+ OEM_1 = 0xBA, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the ';:' key
+ OEM_PLUS = 0xBB, // Windows 2000/XP: For any country/region, the '+' key
+ OEM_COMMA = 0xBC, // Windows 2000/XP: For any country/region, the ',' key
+ OEM_MINUS = 0xBD, // Windows 2000/XP: For any country/region, the '-' key
+ OEM_PERIOD = 0xBE, // Windows 2000/XP: For any country/region, the '.' key
+ OEM_2 = 0xBF, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the '/?' key
+ OEM_3 = 0xC0, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the '`~' key
+ // 0xC1-0xD7, // Reserved
+ // 0xD8-0xDA, // Unassigned
+ OEM_4 = 0xDB, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the '[{' key
+ OEM_5 = 0xDC, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the '\|' key
+ OEM_6 = 0xDD, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the ']}' key
+ OEM_7 = 0xDE, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key
+ OEM_8 = 0xDF, // Used for miscellaneous characters; it can vary by keyboard.
+ // 0xE0, // Reserved
+ // 0xE1, // OEM specific
+ OEM_102 = 0xE2, // Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
+ // 0xE3-E4, // OEM specific
+ PROCESSKEY = 0xE5, // Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
+ // 0xE6, // OEM specific
+ PACKET = 0xE7, // Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP
+ // 0xE8, // Unassigned
+ // 0xE9-F5, // OEM specific
+ ATTN = 0xF6, // Attn key
+ CRSEL = 0xF7, // CrSel key
+ EXSEL = 0xF8, // ExSel key
+ EREOF = 0xF9, // Erase EOF key
+ PLAY = 0xFA, // Play key
+ ZOOM = 0xFB, // Zoom key
+ NONAME = 0xFC, // Reserved
+ PA1 = 0xFD, // PA1 key
+ OEM_CLEAR = 0xFE // Clear key
+ }
+
+ public enum TranslationKeys
+ {
+ // Losely based on http://www.pinvoke.net/default.aspx/Enums/VK.html
+ //NULL = 0x00, //I ADDED THIS ONE MYSELF <-----------------------------------
+ LBUTTON = 0x01, // Left mouse button
+ RBUTTON = 0x02, // Right mouse button
+ CANCEL = 0x03, // Control-break processing
+ MBUTTON = 0x04, // Middle mouse button (three-button mouse)
+ XBUTTON1 = 0x05, // Windows 2000/XP: X1 mouse button
+ XBUTTON2 = 0x06, // Windows 2000/XP: X2 mouse button
+ // 0x07 // Undefined
+ BACKSPACE = 0x08, // BACKSPACE key
+ TAB = 0x09, // TAB key
+ // 0x0A-0x0B, // Reserved
+ CLEAR = 0x0C, // CLEAR key
+ RETURN = 0x0D, // ENTER key
+ // 0x0E-0x0F, // Undefined
+ SHIFT = 0x10, // SHIFT key
+ CONTROL = 0x11, // CTRL key
+ ALT = 0x12, // ALT key
+ PAUSE = 0x13, // PAUSE key
+ CAPITAL = 0x14, // CAPS LOCK key
+ KANA = 0x15, // Input Method Editor (IME) Kana mode
+ HANGUL = 0x15, // IME Hangul mode
+ // 0x16, // Undefined
+ JUNJA = 0x17, // IME Junja mode
+ FINAL = 0x18, // IME final mode
+ HANJA = 0x19, // IME Hanja mode
+ KANJI = 0x19, // IME Kanji mode
+ // 0x1A, // Undefined
+ ESCAPE = 0x1B, // ESC key
+ CONVERT = 0x1C, // IME convert
+ NONCONVERT = 0x1D, // IME nonconvert
+ ACCEPT = 0x1E, // IME accept
+ MODECHANGE = 0x1F, // IME mode change request
+ SPACE = 0x20, // SPACEBAR
+ PAGEUP = 0x21, // PAGE UP key
+ PAGEDOWN = 0x22, // PAGE DOWN key
+ END = 0x23, // END key
+ HOME = 0x24, // HOME key
+ LEFT = 0x25, // LEFT ARROW key
+ UP = 0x26, // UP ARROW key
+ RIGHT = 0x27, // RIGHT ARROW key
+ DOWN = 0x28, // DOWN ARROW key
+ SELECT = 0x29, // SELECT key
+ PRINT = 0x2A, // PRINT key
+ EXECUTE = 0x2B, // EXECUTE key
+ SNAPSHOT = 0x2C, // PRINT SCREEN key
+ INSERT = 0x2D, // INS key
+ DELETE = 0x2E, // DEL key
+ HELP = 0x2F, // HELP key
+ KEY_0 = 0x30, // 0 key
+ KEY_1 = 0x31, // 1 key
+ KEY_2 = 0x32, // 2 key
+ KEY_3 = 0x33, // 3 key
+ KEY_4 = 0x34, // 4 key
+ KEY_5 = 0x35, // 5 key
+ KEY_6 = 0x36, // 6 key
+ KEY_7 = 0x37, // 7 key
+ KEY_8 = 0x38, // 8 key
+ KEY_9 = 0x39, // 9 key
+ // 0x3A-0x40, // Undefined
+ KEY_A = 0x41, // A key
+ KEY_B = 0x42, // B key
+ KEY_C = 0x43, // C key
+ KEY_D = 0x44, // D key
+ KEY_E = 0x45, // E key
+ KEY_F = 0x46, // F key
+ KEY_G = 0x47, // G key
+ KEY_H = 0x48, // H key
+ KEY_I = 0x49, // I key
+ KEY_J = 0x4A, // J key
+ KEY_K = 0x4B, // K key
+ KEY_L = 0x4C, // L key
+ KEY_M = 0x4D, // M key
+ KEY_N = 0x4E, // N key
+ KEY_O = 0x4F, // O key
+ KEY_P = 0x50, // P key
+ KEY_Q = 0x51, // Q key
+ KEY_R = 0x52, // R key
+ KEY_S = 0x53, // S key
+ KEY_T = 0x54, // T key
+ KEY_U = 0x55, // U key
+ KEY_V = 0x56, // V key
+ KEY_W = 0x57, // W key
+ KEY_X = 0x58, // X key
+ KEY_Y = 0x59, // Y key
+ KEY_Z = 0x5A, // Z key
+ LWIN = 0x5B, // Left Windows key (Microsoft Natural keyboard)
+ RWIN = 0x5C, // Right Windows key (Natural keyboard)
+ APPS = 0x5D, // Applications key (Natural keyboard)
+ // 0x5E, // Reserved
+ SLEEP = 0x5F, // Computer Sleep key
+ NUMPAD0 = 0x60, // Numeric keypad 0 key
+ NUMPAD1 = 0x61, // Numeric keypad 1 key
+ NUMPAD2 = 0x62, // Numeric keypad 2 key
+ NUMPAD3 = 0x63, // Numeric keypad 3 key
+ NUMPAD4 = 0x64, // Numeric keypad 4 key
+ NUMPAD5 = 0x65, // Numeric keypad 5 key
+ NUMPAD6 = 0x66, // Numeric keypad 6 key
+ NUMPAD7 = 0x67, // Numeric keypad 7 key
+ NUMPAD8 = 0x68, // Numeric keypad 8 key
+ NUMPAD9 = 0x69, // Numeric keypad 9 key
+ MULTIPLY = 0x6A, // Multiply key
+ ADD = 0x6B, // Add key
+ SEPARATOR = 0x6C, // Separator key
+ SUBTRACT = 0x6D, // Subtract key
+ DECIMAL = 0x6E, // Decimal key
+ DIVIDE = 0x6F, // Divide key
+ F1 = 0x70, // F1 key
+ F2 = 0x71, // F2 key
+ F3 = 0x72, // F3 key
+ F4 = 0x73, // F4 key
+ F5 = 0x74, // F5 key
+ F6 = 0x75, // F6 key
+ F7 = 0x76, // F7 key
+ F8 = 0x77, // F8 key
+ F9 = 0x78, // F9 key
+ F10 = 0x79, // F10 key
+ F11 = 0x7A, // F11 key
+ F12 = 0x7B, // F12 key
+ F13 = 0x7C, // F13 key
+ F14 = 0x7D, // F14 key
+ F15 = 0x7E, // F15 key
+ F16 = 0x7F, // F16 key
+ F17 = 0x80, // F17 key
+ F18 = 0x81, // F18 key
+ F19 = 0x82, // F19 key
+ F20 = 0x83, // F20 key
+ F21 = 0x84, // F21 key
+ F22 = 0x85, // F22 key, (PPC only) Key used to lock device.
+ F23 = 0x86, // F23 key
+ F24 = 0x87, // F24 key
+ // 0x88-0X8F, // Unassigned
+ NUMLOCK = 0x90, // NUM LOCK key
+ SCROLL = 0x91, // SCROLL LOCK key
+ // 0x92-0x96, // OEM specific
+ // 0x97-0x9F, // Unassigned
+ LSHIFT = 0xA0, // Left SHIFT key
+ RSHIFT = 0xA1, // Right SHIFT key
+ LCONTROL = 0xA2, // Left CONTROL key
+ RCONTROL = 0xA3, // Right CONTROL key
+ LMENU = 0xA4, // Left MENU key
+ RMENU = 0xA5, // Right MENU key
+ BROWSER_BACK = 0xA6, // Windows 2000/XP: Browser Back key
+ BROWSER_FORWARD = 0xA7, // Windows 2000/XP: Browser Forward key
+ BROWSER_REFRESH = 0xA8, // Windows 2000/XP: Browser Refresh key
+ BROWSER_STOP = 0xA9, // Windows 2000/XP: Browser Stop key
+ BROWSER_SEARCH = 0xAA, // Windows 2000/XP: Browser Search key
+ BROWSER_FAVORITES = 0xAB, // Windows 2000/XP: Browser Favorites key
+ BROWSER_HOME = 0xAC, // Windows 2000/XP: Browser Start and Home key
+ VOLUME_MUTE = 0xAD, // Windows 2000/XP: Volume Mute key
+ VOLUME_DOWN = 0xAE, // Windows 2000/XP: Volume Down key
+ VOLUME_UP = 0xAF, // Windows 2000/XP: Volume Up key
+ MEDIA_NEXT_TRACK = 0xB0,// Windows 2000/XP: Next Track key
+ MEDIA_PREV_TRACK = 0xB1,// Windows 2000/XP: Previous Track key
+ MEDIA_STOP = 0xB2, // Windows 2000/XP: Stop Media key
+ MEDIA_PLAY_PAUSE = 0xB3,// Windows 2000/XP: Play/Pause Media key
+ LAUNCH_MAIL = 0xB4, // Windows 2000/XP: Start Mail key
+ LAUNCH_MEDIA_SELECT = 0xB5, // Windows 2000/XP: Select Media key
+ LAUNCH_APP1 = 0xB6, // Windows 2000/XP: Start Application 1 key
+ LAUNCH_APP2 = 0xB7, // Windows 2000/XP: Start Application 2 key
+ // 0xB8-0xB9, // Reserved
+ OEM_1 = 0xBA, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the ';:' key
+ OEM_PLUS = 0xBB, // Windows 2000/XP: For any country/region, the '+' key
+ OEM_COMMA = 0xBC, // Windows 2000/XP: For any country/region, the ',' key
+ OEM_MINUS = 0xBD, // Windows 2000/XP: For any country/region, the '-' key
+ OEM_PERIOD = 0xBE, // Windows 2000/XP: For any country/region, the '.' key
+ OEM_2 = 0xBF, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the '/?' key
+ OEM_3 = 0xC0, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the '`~' key
+ // 0xC1-0xD7, // Reserved
+ // 0xD8-0xDA, // Unassigned
+ OEM_4 = 0xDB, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the '[{' key
+ OEM_5 = 0xDC, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the '\|' key
+ OEM_6 = 0xDD, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the ']}' key
+ OEM_7 = 0xDE, // Used for miscellaneous characters; it can vary by keyboard.
+ // Windows 2000/XP: For the US standard keyboard, the 'single-quote/double-quote' key
+ OEM_8 = 0xDF, // Used for miscellaneous characters; it can vary by keyboard.
+ // 0xE0, // Reserved
+ // 0xE1, // OEM specific
+ OEM_102 = 0xE2, // Windows 2000/XP: Either the angle bracket key or the backslash key on the RT 102-key keyboard
+ // 0xE3-E4, // OEM specific
+ PROCESSKEY = 0xE5, // Windows 95/98/Me, Windows NT 4.0, Windows 2000/XP: IME PROCESS key
+ // 0xE6, // OEM specific
+ PACKET = 0xE7, // Windows 2000/XP: Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP
+ // 0xE8, // Unassigned
+ // 0xE9-F5, // OEM specific
+ ATTN = 0xF6, // Attn key
+ CRSEL = 0xF7, // CrSel key
+ EXSEL = 0xF8, // ExSel key
+ EREOF = 0xF9, // Erase EOF key
+ PLAY = 0xFA, // Play key
+ ZOOM = 0xFB, // Zoom key
+ NONAME = 0xFC, // Reserved
+ PA1 = 0xFD, // PA1 key
+ OEM_CLEAR = 0xFE // Clear key
+ }
+
+ ///
+ /// Internal callback processing function
+ ///
+ private delegate IntPtr KeyboardHookHandler(int nCode, IntPtr wParam, IntPtr lParam);
+ private KeyboardHookHandler hookHandler;
+
+ ///
+ /// Function that will be called when defined events occur
+ ///
+ /// VKeys
+ public delegate void KeyboardHookCallback(VKeys key);
+
+ #region Events
+ public event KeyboardHookCallback KeyDown;
+ public event KeyboardHookCallback KeyUp;
+ #endregion
+
+ ///
+ /// Hook ID
+ ///
+ private IntPtr hookID = IntPtr.Zero;
+
+ ///
+ /// Install low level keyboard hook
+ ///
+ public void Install()
+ {
+ int a = 0;
+ int b = 0;
+ a ^= b;
+ hookHandler = HookFunc;
+ hookID = SetHook(hookHandler);
+ }
+
+ ///
+ /// Remove low level keyboard hook
+ ///
+ public void Uninstall()
+ {
+ UnhookWindowsHookEx(hookID);
+ }
+
+ ///
+ /// Registers hook with Windows API
+ ///
+ /// Callback function
+ /// Hook ID
+ private IntPtr SetHook(KeyboardHookHandler proc)
+ {
+ using (ProcessModule module = Process.GetCurrentProcess().MainModule)
+ return SetWindowsHookEx(13, proc, GetModuleHandle(module.ModuleName), 0);
+ }
+
+ ///
+ /// Default hook call, which analyses pressed keys
+ ///
+ private IntPtr HookFunc(int nCode, IntPtr wParam, IntPtr lParam)
+ {
+ if (nCode >= 0)
+ {
+ int iwParam = wParam.ToInt32();
+
+ if ((iwParam == WM_KEYDOWN || iwParam == WM_SYSKEYDOWN))
+ if (KeyDown != null)
+ KeyDown((VKeys)Marshal.ReadInt32(lParam));
+ if ((iwParam == WM_KEYUP || iwParam == WM_SYSKEYUP))
+ if (KeyUp != null)
+ KeyUp((VKeys)Marshal.ReadInt32(lParam));
+ }
+
+ return CallNextHookEx(hookID, nCode, wParam, lParam);
+ }
+
+ ///
+ /// Destructor. Unhook current hook
+ ///
+ ~KeyboardHook()
+ {
+ Uninstall();
+ }
+
+ ///
+ /// Low-Level function declarations
+ ///
+ #region WinAPI
+ private const int WM_KEYDOWN = 0x100;
+ private const int WM_SYSKEYDOWN = 0x104;
+ private const int WM_KEYUP = 0x101;
+ private const int WM_SYSKEYUP = 0x105;
+
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ private static extern IntPtr SetWindowsHookEx(int idHook, KeyboardHookHandler lpfn, IntPtr hMod, uint dwThreadId);
+
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ private static extern bool UnhookWindowsHookEx(IntPtr hhk);
+
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
+
+ [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ private static extern IntPtr GetModuleHandle(string lpModuleName);
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/src/Program.cs b/src/Program.cs
new file mode 100755
index 0000000..7c9861a
--- /dev/null
+++ b/src/Program.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.InteropServices;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace ControlCenter
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ static string appGuid = ((GuidAttribute)Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(GuidAttribute), true)[0]).Value;
+ [STAThread]
+ static void Main()
+ {
+
+ using (Mutex mutex = new Mutex(false, "Global\\" + appGuid))
+ {
+ if (!mutex.WaitOne(0, false))
+ {
+ MessageBox.Show("Program instance is already running!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+ }
+ }
+}
diff --git a/src/Properties/AssemblyInfo.cs b/src/Properties/AssemblyInfo.cs
new file mode 100755
index 0000000..0903f34
--- /dev/null
+++ b/src/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("ControlCenter")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ControlCenter")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[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("1309cb00-06eb-4962-9b20-adf929b654d7")]
+
+// 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/src/Properties/Resources.Designer.cs b/src/Properties/Resources.Designer.cs
new file mode 100755
index 0000000..8547974
--- /dev/null
+++ b/src/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace ControlCenter.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", "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 ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ControlCenter.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/src/Properties/Resources.resx b/src/Properties/Resources.resx
new file mode 100755
index 0000000..ffecec8
--- /dev/null
+++ b/src/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/src/Properties/Settings.Designer.cs b/src/Properties/Settings.Designer.cs
new file mode 100755
index 0000000..4d00358
--- /dev/null
+++ b/src/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace ControlCenter.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
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/src/Properties/Settings.settings b/src/Properties/Settings.settings
new file mode 100755
index 0000000..abf36c5
--- /dev/null
+++ b/src/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+