working initial release
This commit is contained in:
parent
951e6da8cd
commit
f4d0d6a183
43
PicoKeys/ActionMethods.cs
Normal file
43
PicoKeys/ActionMethods.cs
Normal file
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
20
PicoKeys/ActionObject.cs
Normal file
20
PicoKeys/ActionObject.cs
Normal file
@ -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 = "";
|
||||
}
|
||||
}
|
||||
}
|
25
PicoKeys/ActionType.cs
Normal file
25
PicoKeys/ActionType.cs
Normal file
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
155
PicoKeys/Actions.Designer.cs
generated
Normal file
155
PicoKeys/Actions.Designer.cs
generated
Normal file
@ -0,0 +1,155 @@
|
||||
namespace PicoKeys
|
||||
{
|
||||
partial class Actions
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
57
PicoKeys/Actions.cs
Normal file
57
PicoKeys/Actions.cs
Normal file
@ -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<ActionType> actionTypes = new List<ActionType>();
|
||||
|
||||
public Actions(List<ActionType> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
232
PicoKeys/Actions.resx
Normal file
232
PicoKeys/Actions.resx
Normal file
@ -0,0 +1,232 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
</value>
|
||||
</data>
|
||||
</root>
|
@ -1,6 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<configSections>
|
||||
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
|
||||
<section name="PicoKeys.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
|
||||
</sectionGroup>
|
||||
</configSections>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
|
||||
</startup>
|
||||
<userSettings>
|
||||
<PicoKeys.Properties.Settings>
|
||||
<setting name="startMinimized" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
</PicoKeys.Properties.Settings>
|
||||
</userSettings>
|
||||
</configuration>
|
34
PicoKeys/JsonHelper.cs
Normal file
34
PicoKeys/JsonHelper.cs
Normal file
@ -0,0 +1,34 @@
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace PicoKeys
|
||||
{
|
||||
internal class JsonHelper
|
||||
{
|
||||
public static List<string> InvalidJsonElements;
|
||||
|
||||
public static IList<T> DeserializeToList<T>(string jsonString)
|
||||
{
|
||||
InvalidJsonElements = null;
|
||||
var array = JArray.Parse(jsonString);
|
||||
IList<T> objectsList = new List<T>();
|
||||
|
||||
foreach (var item in array)
|
||||
{
|
||||
try
|
||||
{
|
||||
// CorrectElements
|
||||
objectsList.Add(item.ToObject<T>());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
InvalidJsonElements = InvalidJsonElements ?? new List<string>();
|
||||
InvalidJsonElements.Add(item.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
return objectsList;
|
||||
}
|
||||
}
|
||||
}
|
71
PicoKeys/Main.Designer.cs
generated
71
PicoKeys/Main.Designer.cs
generated
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
182
PicoKeys/Main.cs
182
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<ActionObject> actionObjects;
|
||||
private List<ActionType> 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<ActionObject>();
|
||||
actionTypes = new List<ActionType>();
|
||||
}
|
||||
|
||||
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<ActionObject>)JsonHelper.DeserializeToList<ActionObject>(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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -42,6 +42,9 @@
|
||||
<Reference Include="AudioSwitcher.AudioApi.CoreAudio, Version=3.0.0.209, Culture=neutral, PublicKeyToken=fda5729e2db3a64f, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\AudioSwitcher.AudioApi.CoreAudio.3.0.3\lib\net48\AudioSwitcher.AudioApi.CoreAudio.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
@ -55,6 +58,16 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ActionMethods.cs" />
|
||||
<Compile Include="ActionObject.cs" />
|
||||
<Compile Include="Actions.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Actions.Designer.cs">
|
||||
<DependentUpon>Actions.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="ActionType.cs" />
|
||||
<Compile Include="JsonHelper.cs" />
|
||||
<Compile Include="Main.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
@ -63,6 +76,9 @@
|
||||
</Compile>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="Actions.resx">
|
||||
<DependentUpon>Actions.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Main.resx">
|
||||
<DependentUpon>Main.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
42
PicoKeys/Properties/Settings.Designer.cs
generated
42
PicoKeys/Properties/Settings.Designer.cs
generated
@ -1,30 +1,38 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 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.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,9 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="PicoKeys.Properties" GeneratedClassName="Settings">
|
||||
<Profiles />
|
||||
<Settings>
|
||||
<Setting Name="startMinimized" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
@ -2,4 +2,5 @@
|
||||
<packages>
|
||||
<package id="AudioSwitcher.AudioApi" version="3.0.0" targetFramework="net48" />
|
||||
<package id="AudioSwitcher.AudioApi.CoreAudio" version="3.0.3" targetFramework="net48" />
|
||||
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" />
|
||||
</packages>
|
Loading…
Reference in New Issue
Block a user