diff --git a/PicoKeys/ActionMethods.cs b/PicoKeys/ActionMethods.cs
new file mode 100644
index 0000000..4169ac9
--- /dev/null
+++ b/PicoKeys/ActionMethods.cs
@@ -0,0 +1,43 @@
+using AudioSwitcher.AudioApi.CoreAudio;
+using System.Diagnostics;
+using System.IO;
+using System.Windows.Forms;
+
+namespace PicoKeys
+{
+ public class ActionMethods
+ {
+ public void DoNothing()
+ {
+ //DO NOTHING METHOD FOR NO ACTION
+ }
+
+ public void ToggleMicrophone()
+ {
+ using (var audio = new CoreAudioController())
+ {
+ audio.DefaultCaptureDevice.ToggleMute();
+ }
+ }
+
+ public void ToggleSpeaker()
+ {
+ using (var audio = new CoreAudioController())
+ {
+ audio.DefaultPlaybackDevice.ToggleMute();
+ }
+ }
+
+ public void LaunchProgram(string path)
+ {
+ if (File.Exists(path))
+ {
+ Process.Start(path);
+ }
+ else
+ {
+ MessageBox.Show("The program specified for this button was not found!\n\n" + path, "Launcher Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+}
diff --git a/PicoKeys/ActionObject.cs b/PicoKeys/ActionObject.cs
new file mode 100644
index 0000000..08e8879
--- /dev/null
+++ b/PicoKeys/ActionObject.cs
@@ -0,0 +1,20 @@
+namespace PicoKeys
+{
+ public class ActionObject
+ {
+ public string ButtonName { get; set; }
+ public string ButtonText { get; set; }
+ public bool ShowStatusOverlay { get; set; }
+ public string Actiontype { get; set; }
+ public string Parameter { get; set; }
+
+ public ActionObject(string ButtonName, string ButtonText)
+ {
+ this.ButtonName = ButtonName;
+ this.ButtonText = ButtonText;
+ ShowStatusOverlay = true;
+ Actiontype = "None";
+ Parameter = "";
+ }
+ }
+}
\ No newline at end of file
diff --git a/PicoKeys/ActionType.cs b/PicoKeys/ActionType.cs
new file mode 100644
index 0000000..008257b
--- /dev/null
+++ b/PicoKeys/ActionType.cs
@@ -0,0 +1,25 @@
+namespace PicoKeys
+{
+ public class ActionType
+ {
+ public string Name { get; set; }
+ public string Method { get; set; }
+ public bool Dummy { get; set; }
+ public bool HasParameter { get; set; }
+
+ public ActionType(string Name)
+ {
+ this.Name = Name;
+ Method = "DoNothing";
+ Dummy = true;
+ }
+
+ public ActionType(string Name, string Method, bool HasParameter = false)
+ {
+ this.Name = Name;
+ this.Method = Method;
+ Dummy = false;
+ this.HasParameter = HasParameter;
+ }
+ }
+}
\ No newline at end of file
diff --git a/PicoKeys/Actions.Designer.cs b/PicoKeys/Actions.Designer.cs
new file mode 100644
index 0000000..495ff66
--- /dev/null
+++ b/PicoKeys/Actions.Designer.cs
@@ -0,0 +1,155 @@
+namespace PicoKeys
+{
+ partial class Actions
+ {
+ ///
+ /// 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()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Actions));
+ this.label1 = new System.Windows.Forms.Label();
+ this.buttonSave = new System.Windows.Forms.Button();
+ this.textBoxButtonName = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.comboBoxActionType = new System.Windows.Forms.ComboBox();
+ this.checkBoxStatusOverlay = new System.Windows.Forms.CheckBox();
+ this.labelParameter = new System.Windows.Forms.Label();
+ this.textBoxParameter = new System.Windows.Forms.TextBox();
+ this.SuspendLayout();
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(12, 9);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(72, 13);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Button Name:";
+ //
+ // buttonSave
+ //
+ this.buttonSave.Location = new System.Drawing.Point(157, 183);
+ this.buttonSave.Name = "buttonSave";
+ this.buttonSave.Size = new System.Drawing.Size(75, 23);
+ this.buttonSave.TabIndex = 1;
+ this.buttonSave.Text = "save";
+ this.buttonSave.UseVisualStyleBackColor = true;
+ this.buttonSave.Click += new System.EventHandler(this.ButtonSave_Click);
+ //
+ // textBoxButtonName
+ //
+ this.textBoxButtonName.Location = new System.Drawing.Point(15, 25);
+ this.textBoxButtonName.MaxLength = 20;
+ this.textBoxButtonName.Name = "textBoxButtonName";
+ this.textBoxButtonName.Size = new System.Drawing.Size(217, 20);
+ this.textBoxButtonName.TabIndex = 2;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(12, 58);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(74, 13);
+ this.label2.TabIndex = 3;
+ this.label2.Text = "Button Action:";
+ //
+ // comboBoxActionType
+ //
+ this.comboBoxActionType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.comboBoxActionType.FormattingEnabled = true;
+ this.comboBoxActionType.Location = new System.Drawing.Point(15, 74);
+ this.comboBoxActionType.Name = "comboBoxActionType";
+ this.comboBoxActionType.Size = new System.Drawing.Size(217, 21);
+ this.comboBoxActionType.TabIndex = 4;
+ this.comboBoxActionType.SelectedIndexChanged += new System.EventHandler(this.ComboBoxActionType_SelectedIndexChanged);
+ //
+ // checkBoxStatusOverlay
+ //
+ this.checkBoxStatusOverlay.AutoSize = true;
+ this.checkBoxStatusOverlay.Checked = true;
+ this.checkBoxStatusOverlay.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.checkBoxStatusOverlay.Location = new System.Drawing.Point(15, 160);
+ this.checkBoxStatusOverlay.Name = "checkBoxStatusOverlay";
+ this.checkBoxStatusOverlay.Size = new System.Drawing.Size(198, 17);
+ this.checkBoxStatusOverlay.TabIndex = 5;
+ this.checkBoxStatusOverlay.Text = "Show Status Overlay when triggered";
+ this.checkBoxStatusOverlay.UseVisualStyleBackColor = true;
+ //
+ // labelParameter
+ //
+ this.labelParameter.AutoSize = true;
+ this.labelParameter.Location = new System.Drawing.Point(12, 108);
+ this.labelParameter.Name = "labelParameter";
+ this.labelParameter.Size = new System.Drawing.Size(58, 13);
+ this.labelParameter.TabIndex = 6;
+ this.labelParameter.Text = "Parameter:";
+ this.labelParameter.Visible = false;
+ //
+ // textBoxParameter
+ //
+ this.textBoxParameter.Location = new System.Drawing.Point(15, 124);
+ this.textBoxParameter.MaxLength = 230;
+ this.textBoxParameter.Name = "textBoxParameter";
+ this.textBoxParameter.Size = new System.Drawing.Size(217, 20);
+ this.textBoxParameter.TabIndex = 7;
+ this.textBoxParameter.Visible = false;
+ //
+ // Actions
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(244, 222);
+ this.Controls.Add(this.textBoxParameter);
+ this.Controls.Add(this.labelParameter);
+ this.Controls.Add(this.checkBoxStatusOverlay);
+ this.Controls.Add(this.comboBoxActionType);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.textBoxButtonName);
+ this.Controls.Add(this.buttonSave);
+ this.Controls.Add(this.label1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.MinimizeBox = false;
+ this.Name = "Actions";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "Actions - PicoKeys";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Button buttonSave;
+ private System.Windows.Forms.TextBox textBoxButtonName;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.ComboBox comboBoxActionType;
+ private System.Windows.Forms.CheckBox checkBoxStatusOverlay;
+ private System.Windows.Forms.Label labelParameter;
+ private System.Windows.Forms.TextBox textBoxParameter;
+ }
+}
\ No newline at end of file
diff --git a/PicoKeys/Actions.cs b/PicoKeys/Actions.cs
new file mode 100644
index 0000000..bf50c5b
--- /dev/null
+++ b/PicoKeys/Actions.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace PicoKeys
+{
+ public partial class Actions : Form
+ {
+ public ActionObject a;
+ private List actionTypes = new List();
+
+ public Actions(List actionTypes, ActionObject a)
+ {
+ InitializeComponent();
+ this.a = a;
+ this.actionTypes = actionTypes;
+ textBoxButtonName.Text = a.ButtonText;
+ checkBoxStatusOverlay.Checked = a.ShowStatusOverlay;
+ var bs = new BindingSource
+ {
+ DataSource = actionTypes
+ };
+ comboBoxActionType.DataSource = bs.DataSource;
+ comboBoxActionType.DisplayMember = "Name";
+ comboBoxActionType.ValueMember = "Name";
+ comboBoxActionType.SelectedIndex = comboBoxActionType.FindStringExact(a.Actiontype);
+ textBoxParameter.Text = a.Parameter;
+ }
+
+ private void ButtonSave_Click(object sender, EventArgs e)
+ {
+ a.ButtonText = textBoxButtonName.Text;
+ a.ShowStatusOverlay = checkBoxStatusOverlay.Checked;
+ a.Actiontype = comboBoxActionType.Text;
+ a.Parameter = textBoxParameter.Text;
+ DialogResult = DialogResult.OK;
+ Close();
+ }
+
+ private void ComboBoxActionType_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ //if actiontype HasParameter, show textbox for parameter, otherwise hide it
+ ActionType at = actionTypes.Single(s => s.Name == (comboBoxActionType.SelectedItem as dynamic).Name);
+ if (at.HasParameter)
+ {
+ labelParameter.Visible = true;
+ textBoxParameter.Visible = true;
+ }
+ else
+ {
+ labelParameter.Visible = false;
+ textBoxParameter.Visible = false;
+ }
+ }
+ }
+}
diff --git a/PicoKeys/Actions.resx b/PicoKeys/Actions.resx
new file mode 100644
index 0000000..3954d79
--- /dev/null
+++ b/PicoKeys/Actions.resx
@@ -0,0 +1,232 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+ 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
+
+
+
\ No newline at end of file
diff --git a/PicoKeys/App.config b/PicoKeys/App.config
index 193aecc..b5213e4 100644
--- a/PicoKeys/App.config
+++ b/PicoKeys/App.config
@@ -1,6 +1,18 @@
+
+
+
+
+
+
+
+
+ False
+
+
+
\ No newline at end of file
diff --git a/PicoKeys/JsonHelper.cs b/PicoKeys/JsonHelper.cs
new file mode 100644
index 0000000..9836e7f
--- /dev/null
+++ b/PicoKeys/JsonHelper.cs
@@ -0,0 +1,34 @@
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+
+namespace PicoKeys
+{
+ internal class JsonHelper
+ {
+ public static List InvalidJsonElements;
+
+ public static IList DeserializeToList(string jsonString)
+ {
+ InvalidJsonElements = null;
+ var array = JArray.Parse(jsonString);
+ IList objectsList = new List();
+
+ foreach (var item in array)
+ {
+ try
+ {
+ // CorrectElements
+ objectsList.Add(item.ToObject());
+ }
+ catch (Exception ex)
+ {
+ InvalidJsonElements = InvalidJsonElements ?? new List();
+ InvalidJsonElements.Add(item.ToString());
+ }
+ }
+
+ return objectsList;
+ }
+ }
+}
diff --git a/PicoKeys/Main.Designer.cs b/PicoKeys/Main.Designer.cs
index 9f2eca3..1a5239a 100644
--- a/PicoKeys/Main.Designer.cs
+++ b/PicoKeys/Main.Designer.cs
@@ -47,9 +47,10 @@
this.button10 = new System.Windows.Forms.Button();
this.button11 = new System.Windows.Forms.Button();
this.button12 = new System.Windows.Forms.Button();
- this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.groupBoxActions = new System.Windows.Forms.GroupBox();
+ this.checkBoxMinimized = new System.Windows.Forms.CheckBox();
this.contextMenuStripTrayIcon.SuspendLayout();
- this.groupBox1.SuspendLayout();
+ this.groupBoxActions.SuspendLayout();
this.SuspendLayout();
//
// contextMenuStripTrayIcon
@@ -79,9 +80,9 @@
this.checkBoxAutostart.AutoSize = true;
this.checkBoxAutostart.Location = new System.Drawing.Point(12, 12);
this.checkBoxAutostart.Name = "checkBoxAutostart";
- this.checkBoxAutostart.Size = new System.Drawing.Size(145, 17);
+ this.checkBoxAutostart.Size = new System.Drawing.Size(142, 17);
this.checkBoxAutostart.TabIndex = 1;
- this.checkBoxAutostart.Text = "Autostart on System Boot";
+ this.checkBoxAutostart.Text = "Autostart on system boot";
this.checkBoxAutostart.UseVisualStyleBackColor = true;
this.checkBoxAutostart.CheckedChanged += new System.EventHandler(this.CheckBoxAutostart_CheckedChanged);
//
@@ -213,34 +214,46 @@
this.button12.UseVisualStyleBackColor = true;
this.button12.Click += new System.EventHandler(this.ButtonAction_Click);
//
- // groupBox1
+ // groupBoxActions
//
- this.groupBox1.Controls.Add(this.button1);
- this.groupBox1.Controls.Add(this.button12);
- this.groupBox1.Controls.Add(this.label1);
- this.groupBox1.Controls.Add(this.button11);
- this.groupBox1.Controls.Add(this.button2);
- this.groupBox1.Controls.Add(this.button10);
- this.groupBox1.Controls.Add(this.button3);
- this.groupBox1.Controls.Add(this.button9);
- this.groupBox1.Controls.Add(this.button4);
- this.groupBox1.Controls.Add(this.button8);
- this.groupBox1.Controls.Add(this.button5);
- this.groupBox1.Controls.Add(this.button7);
- this.groupBox1.Controls.Add(this.button6);
- this.groupBox1.Location = new System.Drawing.Point(12, 35);
- this.groupBox1.Name = "groupBox1";
- this.groupBox1.Size = new System.Drawing.Size(331, 246);
- this.groupBox1.TabIndex = 15;
- this.groupBox1.TabStop = false;
- this.groupBox1.Text = "Button Actions";
+ this.groupBoxActions.Controls.Add(this.button1);
+ this.groupBoxActions.Controls.Add(this.button12);
+ this.groupBoxActions.Controls.Add(this.label1);
+ this.groupBoxActions.Controls.Add(this.button11);
+ this.groupBoxActions.Controls.Add(this.button2);
+ this.groupBoxActions.Controls.Add(this.button10);
+ this.groupBoxActions.Controls.Add(this.button3);
+ this.groupBoxActions.Controls.Add(this.button9);
+ this.groupBoxActions.Controls.Add(this.button4);
+ this.groupBoxActions.Controls.Add(this.button8);
+ this.groupBoxActions.Controls.Add(this.button5);
+ this.groupBoxActions.Controls.Add(this.button7);
+ this.groupBoxActions.Controls.Add(this.button6);
+ this.groupBoxActions.Location = new System.Drawing.Point(12, 35);
+ this.groupBoxActions.Name = "groupBoxActions";
+ this.groupBoxActions.Size = new System.Drawing.Size(331, 246);
+ this.groupBoxActions.TabIndex = 15;
+ this.groupBoxActions.TabStop = false;
+ this.groupBoxActions.Text = "Button Actions";
+ //
+ // checkBoxMinimized
+ //
+ this.checkBoxMinimized.AutoSize = true;
+ this.checkBoxMinimized.Location = new System.Drawing.Point(175, 12);
+ this.checkBoxMinimized.Name = "checkBoxMinimized";
+ this.checkBoxMinimized.Size = new System.Drawing.Size(168, 17);
+ this.checkBoxMinimized.TabIndex = 16;
+ this.checkBoxMinimized.Text = "Start minimized (in system tray)";
+ this.checkBoxMinimized.UseVisualStyleBackColor = true;
+ this.checkBoxMinimized.CheckedChanged += new System.EventHandler(this.CheckBoxMinimized_CheckedChanged);
//
// Main
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(356, 295);
- this.Controls.Add(this.groupBox1);
+ this.Controls.Add(this.checkBoxMinimized);
+ this.Controls.Add(this.groupBoxActions);
this.Controls.Add(this.checkBoxAutostart);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
@@ -250,10 +263,11 @@
this.Text = "PicoKeys v1.0 | © 2024 kmpr.at";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Main_FormClosing);
this.Load += new System.EventHandler(this.Main_Load);
+ this.Shown += new System.EventHandler(this.Main_Shown);
this.Resize += new System.EventHandler(this.Main_Resize);
this.contextMenuStripTrayIcon.ResumeLayout(false);
- this.groupBox1.ResumeLayout(false);
- this.groupBox1.PerformLayout();
+ this.groupBoxActions.ResumeLayout(false);
+ this.groupBoxActions.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
@@ -278,7 +292,8 @@
private System.Windows.Forms.Button button10;
private System.Windows.Forms.Button button11;
private System.Windows.Forms.Button button12;
- private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.GroupBox groupBoxActions;
+ private System.Windows.Forms.CheckBox checkBoxMinimized;
}
}
diff --git a/PicoKeys/Main.cs b/PicoKeys/Main.cs
index d84312d..b36f705 100644
--- a/PicoKeys/Main.cs
+++ b/PicoKeys/Main.cs
@@ -1,15 +1,12 @@
-using AudioSwitcher.AudioApi.CoreAudio;
-using Microsoft.Win32;
+using Microsoft.Win32;
+using Newtonsoft.Json;
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.Reflection;
using System.Runtime.InteropServices;
-using System.Text;
-using System.Threading.Tasks;
using System.Windows.Forms;
namespace PicoKeys
@@ -38,7 +35,10 @@ namespace PicoKeys
private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
- private NotifyIcon trayIcon;
+ private NotifyIcon TrayIcon;
+
+ private List actionObjects;
+ private List actionTypes;
private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
@@ -50,46 +50,40 @@ namespace PicoKeys
switch (vkCode)
{
case 0x7C: // F13
- using (var audio = new CoreAudioController())
- {
- audio.DefaultPlaybackDevice.ToggleMute();
- }
+ Trigger(button1);
break;
case 0x7D: // F14
- using (var audio = new CoreAudioController())
- {
- audio.DefaultCaptureDevice.ToggleMute();
- }
+ Trigger(button2);
break;
case 0x7E: // F15
-
+ Trigger(button3);
break;
case 0x7F: // F16
-
+ Trigger(button4);
break;
case 0x80: // F17
-
+ Trigger(button5);
break;
case 0x81: // F18
-
+ Trigger(button6);
break;
case 0x82: // F19
-
+ Trigger(button7);
break;
case 0x83: // F20
-
+ Trigger(button8);
break;
case 0x84: // F21
-
+ Trigger(button9);
break;
case 0x85: // F22
-
+ Trigger(button10);
break;
case 0x86: // F23
-
+ Trigger(button11);
break;
case 0x87: // F24
-
+ Trigger(button12);
break;
}
}
@@ -97,21 +91,84 @@ namespace PicoKeys
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
+ private bool overrideAutostartChecked = false;
+
public Main()
{
InitializeComponent();
- trayIcon = new NotifyIcon();
- trayIcon.Icon = Properties.Resources.icons8_keyboard_96;
- trayIcon.Text = "MagicKeys";
- trayIcon.Visible = false;
- trayIcon.DoubleClick += new EventHandler(TrayIcon_DoubleClick);
- trayIcon.ContextMenuStrip = contextMenuStripTrayIcon;
+ checkBoxMinimized.Checked = Properties.Settings.Default.startMinimized;
+ RegistryKey rk = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", false);
+ if (rk.GetValue("PicoKeys") != null)
+ {
+ overrideAutostartChecked = true;
+ checkBoxAutostart.Checked = true;
+ }
+ TrayIcon = new NotifyIcon
+ {
+ Icon = Properties.Resources.icons8_keyboard_96,
+ Text = "PicoKeys",
+ Visible = false
+ };
+ TrayIcon.DoubleClick += new EventHandler(TrayIcon_DoubleClick);
+ TrayIcon.ContextMenuStrip = contextMenuStripTrayIcon;
+ actionObjects = new List();
+ actionTypes = new List();
}
private void Main_Load(object sender, EventArgs e)
{
_proc = HookCallback;
_hookID = SetHook(_proc);
+
+ //load default actiontypes
+ actionTypes.Add(new ActionType("None"));
+ actionTypes.Add(new ActionType("Mute Mic", "ToggleMicrophone"));
+ actionTypes.Add(new ActionType("Mute Sound", "ToggleSpeaker"));
+ actionTypes.Add(new ActionType("Launch Program", "LaunchProgram", true));
+
+ //load stored actions
+ if (!File.Exists("actions.mk0"))
+ {
+ //no stored actions (initial start), so lets generate them for each button
+ foreach (Control b in groupBoxActions.Controls)
+ {
+ if (b is Button)
+ {
+ ActionObject a = new ActionObject(b.Name, b.Text);
+ actionObjects.Add(a);
+ }
+ }
+ //save into file
+ using (StreamWriter file = File.CreateText("actions.mk0"))
+ {
+ JsonSerializer serializer = new JsonSerializer();
+ serializer.Serialize(file, actionObjects);
+ }
+ //clear list
+ actionObjects.Clear();
+ }
+ //load actions from file into list
+ using (StreamReader file = File.OpenText("actions.mk0"))
+ {
+ actionObjects = (List)JsonHelper.DeserializeToList(file.ReadToEnd());
+ }
+ //load button texts from actionobjects
+ foreach (Control b in groupBoxActions.Controls)
+ {
+ if (b is Button)
+ {
+ ActionObject a = actionObjects.Single(s => s.ButtonName == b.Name);
+ b.Text = a.ButtonText;
+ }
+ }
+ }
+
+ private void Main_Shown(object sender, EventArgs e)
+ {
+ if (checkBoxMinimized.Checked)
+ {
+ WindowState = FormWindowState.Minimized;
+ }
}
private void Main_FormClosing(object sender, FormClosingEventArgs e)
@@ -131,11 +188,10 @@ namespace PicoKeys
private void Main_Resize(object sender, EventArgs e)
{
- if (this.WindowState == FormWindowState.Minimized)
+ if (WindowState == FormWindowState.Minimized)
{
- this.Hide();
- trayIcon.Visible = true;
- trayIcon.ShowBalloonTip(1000, "MagicKeys", "Minimized to tray", ToolTipIcon.Info);
+ Hide();
+ TrayIcon.Visible = true;
}
}
@@ -143,7 +199,7 @@ namespace PicoKeys
{
this.Show();
this.WindowState = FormWindowState.Normal;
- trayIcon.Visible = false;
+ TrayIcon.Visible = false;
}
private void ExitToolStripMenuItem_Click(object sender, EventArgs e)
@@ -155,17 +211,61 @@ namespace PicoKeys
{
RegistryKey rk = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
- if (checkBoxAutostart.Checked)
- rk.SetValue("PicoKeys", Application.ExecutablePath);
+ if (overrideAutostartChecked)
+ overrideAutostartChecked = false;
else
- rk.DeleteValue("PicoKeys", false);
+ {
+ if (checkBoxAutostart.Checked)
+ rk.SetValue("PicoKeys", Application.ExecutablePath);
+ else
+ rk.DeleteValue("PicoKeys", false);
+ }
}
private void ButtonAction_Click(object sender, EventArgs e)
{
Button b = sender as Button;
- MessageBox.Show(b.Name);
+ ActionObject a = actionObjects.Single(s => s.ButtonName == b.Name);
+ Actions actions = new Actions(actionTypes, a);
+ DialogResult dr = actions.ShowDialog();
+ if (dr == DialogResult.OK)
+ {
+ b.Text = a.ButtonText;
+ //also overwrite the actions settings file
+ using (StreamWriter file = File.CreateText("actions.mk0"))
+ {
+ JsonSerializer serializer = new JsonSerializer();
+ serializer.Serialize(file, actionObjects);
+ }
+ }
+ }
+ private void Trigger(Button button)
+ {
+ ActionObject a = actionObjects.Single(s => s.ButtonName == button.Name);
+ ActionType at = actionTypes.Single(s => s.Name == a.Actiontype);
+ Type t = typeof(ActionMethods);
+ MethodInfo mi = t.GetMethod(at.Method);
+ ActionMethods am = new ActionMethods();
+ if (at.HasParameter)
+ {
+ mi.Invoke(am, new[] { a.Parameter });
+ }
+ else
+ {
+ mi.Invoke(am, null);
+ }
+ //if a.ShowStatusOverlay, then display balloontip too
+ if (a.ShowStatusOverlay)
+ {
+ TrayIcon.ShowBalloonTip(2000, "PicoKeys", "Triggered: " + a.ButtonText, ToolTipIcon.None);
+ }
+ }
+
+ private void CheckBoxMinimized_CheckedChanged(object sender, EventArgs e)
+ {
+ Properties.Settings.Default.startMinimized = checkBoxMinimized.Checked;
+ Properties.Settings.Default.Save();
}
}
}
diff --git a/PicoKeys/PicoKeys.csproj b/PicoKeys/PicoKeys.csproj
index abc4d78..0b21102 100644
--- a/PicoKeys/PicoKeys.csproj
+++ b/PicoKeys/PicoKeys.csproj
@@ -42,6 +42,9 @@
..\packages\AudioSwitcher.AudioApi.CoreAudio.3.0.3\lib\net48\AudioSwitcher.AudioApi.CoreAudio.dll
+
+ ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
+
@@ -55,6 +58,16 @@
+
+
+
+ Form
+
+
+ Actions.cs
+
+
+
Form
@@ -63,6 +76,9 @@
+
+ Actions.cs
+
Main.cs
diff --git a/PicoKeys/Properties/Settings.Designer.cs b/PicoKeys/Properties/Settings.Designer.cs
index f5285ae..b40164e 100644
--- a/PicoKeys/Properties/Settings.Designer.cs
+++ b/PicoKeys/Properties/Settings.Designer.cs
@@ -1,30 +1,38 @@
//------------------------------------------------------------------------------
//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.42000
+// Dieser Code wurde von einem Tool generiert.
+// Laufzeitversion:4.0.30319.42000
//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
+// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+// der Code erneut generiert wird.
//
//------------------------------------------------------------------------------
-namespace PicoKeys.Properties
-{
-
-
+namespace PicoKeys.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
- {
-
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.11.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
- {
+
+ public static Settings Default {
+ get {
return defaultInstance;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool startMinimized {
+ get {
+ return ((bool)(this["startMinimized"]));
+ }
+ set {
+ this["startMinimized"] = value;
+ }
+ }
}
}
diff --git a/PicoKeys/Properties/Settings.settings b/PicoKeys/Properties/Settings.settings
index 3964565..dc36d9d 100644
--- a/PicoKeys/Properties/Settings.settings
+++ b/PicoKeys/Properties/Settings.settings
@@ -1,7 +1,9 @@
-
-
-
-
-
-
+
+
+
+
+ False
+
+
+
\ No newline at end of file
diff --git a/PicoKeys/packages.config b/PicoKeys/packages.config
index 8bea25d..dc3f4d0 100644
--- a/PicoKeys/packages.config
+++ b/PicoKeys/packages.config
@@ -2,4 +2,5 @@
+
\ No newline at end of file