From 951e6da8cdeb3d6542bfa167401829122c5392bc Mon Sep 17 00:00:00 2001 From: Manuel Date: Sat, 16 Nov 2024 11:59:31 +0100 Subject: [PATCH] =?UTF-8?q?Projektdateien=20hinzuf=C3=BCgen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PicoKeys.sln | 25 ++ PicoKeys/App.config | 6 + PicoKeys/Main.Designer.cs | 284 ++++++++++++++++++++++ PicoKeys/Main.cs | 171 +++++++++++++ PicoKeys/Main.resx | 235 ++++++++++++++++++ PicoKeys/PicoKeys.csproj | 97 ++++++++ PicoKeys/Program.cs | 22 ++ PicoKeys/Properties/AssemblyInfo.cs | 33 +++ PicoKeys/Properties/Resources.Designer.cs | 73 ++++++ PicoKeys/Properties/Resources.resx | 124 ++++++++++ PicoKeys/Properties/Settings.Designer.cs | 30 +++ PicoKeys/Properties/Settings.settings | 7 + PicoKeys/Resources/icons8-keyboard-96.ico | Bin 0 -> 6391 bytes PicoKeys/Resources/icons8-keyboard-96.png | Bin 0 -> 856 bytes PicoKeys/icons8-keyboard-96.ico | Bin 0 -> 6391 bytes PicoKeys/packages.config | 5 + 16 files changed, 1112 insertions(+) create mode 100644 PicoKeys.sln create mode 100644 PicoKeys/App.config create mode 100644 PicoKeys/Main.Designer.cs create mode 100644 PicoKeys/Main.cs create mode 100644 PicoKeys/Main.resx create mode 100644 PicoKeys/PicoKeys.csproj create mode 100644 PicoKeys/Program.cs create mode 100644 PicoKeys/Properties/AssemblyInfo.cs create mode 100644 PicoKeys/Properties/Resources.Designer.cs create mode 100644 PicoKeys/Properties/Resources.resx create mode 100644 PicoKeys/Properties/Settings.Designer.cs create mode 100644 PicoKeys/Properties/Settings.settings create mode 100644 PicoKeys/Resources/icons8-keyboard-96.ico create mode 100644 PicoKeys/Resources/icons8-keyboard-96.png create mode 100644 PicoKeys/icons8-keyboard-96.ico create mode 100644 PicoKeys/packages.config diff --git a/PicoKeys.sln b/PicoKeys.sln new file mode 100644 index 0000000..0b70431 --- /dev/null +++ b/PicoKeys.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.11.35312.102 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PicoKeys", "PicoKeys\PicoKeys.csproj", "{6D00FACA-731C-4C74-AD4C-8197EB6EFDFF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6D00FACA-731C-4C74-AD4C-8197EB6EFDFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D00FACA-731C-4C74-AD4C-8197EB6EFDFF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D00FACA-731C-4C74-AD4C-8197EB6EFDFF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D00FACA-731C-4C74-AD4C-8197EB6EFDFF}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {95BC1132-3092-48C2-AF33-523740F7BEE6} + EndGlobalSection +EndGlobal diff --git a/PicoKeys/App.config b/PicoKeys/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/PicoKeys/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/PicoKeys/Main.Designer.cs b/PicoKeys/Main.Designer.cs new file mode 100644 index 0000000..9f2eca3 --- /dev/null +++ b/PicoKeys/Main.Designer.cs @@ -0,0 +1,284 @@ +namespace PicoKeys +{ + partial class Main + { + /// + /// Erforderliche Designervariable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Verwendete Ressourcen bereinigen. + /// + /// True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Vom Windows Form-Designer generierter Code + + /// + /// Erforderliche Methode für die Designerunterstützung. + /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); + this.contextMenuStripTrayIcon = new System.Windows.Forms.ContextMenuStrip(this.components); + this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.checkBoxAutostart = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button6 = 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.button12 = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.contextMenuStripTrayIcon.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // contextMenuStripTrayIcon + // + this.contextMenuStripTrayIcon.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.settingsToolStripMenuItem, + this.exitToolStripMenuItem}); + this.contextMenuStripTrayIcon.Name = "contextMenuStrip1"; + this.contextMenuStripTrayIcon.Size = new System.Drawing.Size(117, 48); + // + // settingsToolStripMenuItem + // + this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; + this.settingsToolStripMenuItem.Size = new System.Drawing.Size(116, 22); + this.settingsToolStripMenuItem.Text = "Settings"; + this.settingsToolStripMenuItem.Click += new System.EventHandler(this.TrayIcon_DoubleClick); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(116, 22); + this.exitToolStripMenuItem.Text = "Exit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolStripMenuItem_Click); + // + // checkBoxAutostart + // + 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.TabIndex = 1; + this.checkBoxAutostart.Text = "Autostart on System Boot"; + this.checkBoxAutostart.UseVisualStyleBackColor = true; + this.checkBoxAutostart.CheckedChanged += new System.EventHandler(this.CheckBoxAutostart_CheckedChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(313, 204); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(0, 13); + this.label1.TabIndex = 2; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(6, 19); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 69); + this.button1.TabIndex = 3; + this.button1.Text = "button1"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.ButtonAction_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(87, 19); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(75, 69); + this.button2.TabIndex = 4; + this.button2.Text = "button2"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.ButtonAction_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(168, 19); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 69); + this.button3.TabIndex = 5; + this.button3.Text = "button3"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.ButtonAction_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(249, 19); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 69); + this.button4.TabIndex = 6; + this.button4.Text = "button4"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.ButtonAction_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(6, 94); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(75, 69); + this.button5.TabIndex = 7; + this.button5.Text = "button5"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.ButtonAction_Click); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(87, 94); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(75, 69); + this.button6.TabIndex = 8; + this.button6.Text = "button6"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.ButtonAction_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(168, 94); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(75, 69); + this.button7.TabIndex = 9; + this.button7.Text = "button7"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.ButtonAction_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(249, 94); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(75, 69); + this.button8.TabIndex = 10; + this.button8.Text = "button8"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.ButtonAction_Click); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(6, 169); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(75, 69); + this.button9.TabIndex = 11; + this.button9.Text = "button9"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.ButtonAction_Click); + // + // button10 + // + this.button10.Location = new System.Drawing.Point(87, 169); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(75, 69); + this.button10.TabIndex = 12; + this.button10.Text = "button10"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.ButtonAction_Click); + // + // button11 + // + this.button11.Location = new System.Drawing.Point(168, 169); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(75, 69); + this.button11.TabIndex = 13; + this.button11.Text = "button11"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.ButtonAction_Click); + // + // button12 + // + this.button12.Location = new System.Drawing.Point(249, 169); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(75, 69); + this.button12.TabIndex = 14; + this.button12.Text = "button12"; + this.button12.UseVisualStyleBackColor = true; + this.button12.Click += new System.EventHandler(this.ButtonAction_Click); + // + // groupBox1 + // + 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"; + // + // 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.checkBoxAutostart); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "Main"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + 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.Resize += new System.EventHandler(this.Main_Resize); + this.contextMenuStripTrayIcon.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ContextMenuStrip contextMenuStripTrayIcon; + private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.CheckBox checkBoxAutostart; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button6; + 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.Button button12; + private System.Windows.Forms.GroupBox groupBox1; + } +} + diff --git a/PicoKeys/Main.cs b/PicoKeys/Main.cs new file mode 100644 index 0000000..d84312d --- /dev/null +++ b/PicoKeys/Main.cs @@ -0,0 +1,171 @@ +using AudioSwitcher.AudioApi.CoreAudio; +using Microsoft.Win32; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace PicoKeys +{ + public partial class Main : Form + { + [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc 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); + + private const int WH_KEYBOARD_LL = 13; + private const int WM_KEYDOWN = 0x0100; + private const int WM_KEYUP = 0x0101; + + private IntPtr _hookID = IntPtr.Zero; + private LowLevelKeyboardProc _proc; + + private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); + + private NotifyIcon trayIcon; + + private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) + { + if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN) + { + int vkCode = Marshal.ReadInt32(lParam); + if (vkCode >= 0x7C && vkCode <= 0x87) + { + switch (vkCode) + { + case 0x7C: // F13 + using (var audio = new CoreAudioController()) + { + audio.DefaultPlaybackDevice.ToggleMute(); + } + break; + case 0x7D: // F14 + using (var audio = new CoreAudioController()) + { + audio.DefaultCaptureDevice.ToggleMute(); + } + break; + case 0x7E: // F15 + + break; + case 0x7F: // F16 + + break; + case 0x80: // F17 + + break; + case 0x81: // F18 + + break; + case 0x82: // F19 + + break; + case 0x83: // F20 + + break; + case 0x84: // F21 + + break; + case 0x85: // F22 + + break; + case 0x86: // F23 + + break; + case 0x87: // F24 + + break; + } + } + } + return CallNextHookEx(_hookID, nCode, wParam, lParam); + } + + 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; + } + + private void Main_Load(object sender, EventArgs e) + { + _proc = HookCallback; + _hookID = SetHook(_proc); + } + + private void Main_FormClosing(object sender, FormClosingEventArgs e) + { + UnhookWindowsHookEx(_hookID); + } + + private IntPtr SetHook(LowLevelKeyboardProc proc) + { + using (Process curProcess = Process.GetCurrentProcess()) + using (ProcessModule curModule = curProcess.MainModule) + { + return SetWindowsHookEx(WH_KEYBOARD_LL, proc, + GetModuleHandle(curModule.ModuleName), 0); + } + } + + private void Main_Resize(object sender, EventArgs e) + { + if (this.WindowState == FormWindowState.Minimized) + { + this.Hide(); + trayIcon.Visible = true; + trayIcon.ShowBalloonTip(1000, "MagicKeys", "Minimized to tray", ToolTipIcon.Info); + } + } + + private void TrayIcon_DoubleClick(object sender, EventArgs e) + { + this.Show(); + this.WindowState = FormWindowState.Normal; + trayIcon.Visible = false; + } + + private void ExitToolStripMenuItem_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void CheckBoxAutostart_CheckedChanged(object sender, EventArgs e) + { + RegistryKey rk = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); + + 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); + + } + } +} diff --git a/PicoKeys/Main.resx b/PicoKeys/Main.resx new file mode 100644 index 0000000..0e0da44 --- /dev/null +++ b/PicoKeys/Main.resx @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + 17, 17 + + + + + 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 + + + \ No newline at end of file diff --git a/PicoKeys/PicoKeys.csproj b/PicoKeys/PicoKeys.csproj new file mode 100644 index 0000000..abc4d78 --- /dev/null +++ b/PicoKeys/PicoKeys.csproj @@ -0,0 +1,97 @@ + + + + + Debug + AnyCPU + {6D00FACA-731C-4C74-AD4C-8197EB6EFDFF} + WinExe + PicoKeys + PicoKeys + v4.8 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + icons8-keyboard-96.ico + + + + ..\packages\AudioSwitcher.AudioApi.3.0.0\lib\net40\AudioSwitcher.AudioApi.dll + + + ..\packages\AudioSwitcher.AudioApi.CoreAudio.3.0.3\lib\net48\AudioSwitcher.AudioApi.CoreAudio.dll + + + + + + + + + + + + + + + + Form + + + Main.cs + + + + + Main.cs + + + ResXFileCodeGenerator + Designer + Resources.Designer.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + + + + + + + \ No newline at end of file diff --git a/PicoKeys/Program.cs b/PicoKeys/Program.cs new file mode 100644 index 0000000..2b6be69 --- /dev/null +++ b/PicoKeys/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace PicoKeys +{ + internal static class Program + { + /// + /// Der Haupteinstiegspunkt für die Anwendung. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Main()); + } + } +} diff --git a/PicoKeys/Properties/AssemblyInfo.cs b/PicoKeys/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1ecb100 --- /dev/null +++ b/PicoKeys/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("PicoKeys")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("PicoKeys")] +[assembly: AssemblyCopyright("Copyright © 2024 kmpr.at")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly +// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("6d00faca-731c-4c74-ad4c-8197eb6efdff")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/PicoKeys/Properties/Resources.Designer.cs b/PicoKeys/Properties/Resources.Designer.cs new file mode 100644 index 0000000..c019bf0 --- /dev/null +++ b/PicoKeys/Properties/Resources.Designer.cs @@ -0,0 +1,73 @@ +//------------------------------------------------------------------------------ +// +// Dieser Code wurde von einem Tool generiert. +// Laufzeitversion:4.0.30319.42000 +// +// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +// der Code erneut generiert wird. +// +//------------------------------------------------------------------------------ + +namespace PicoKeys.Properties { + using System; + + + /// + /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. + /// + // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert + // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert. + // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen + // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.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() { + } + + /// + /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PicoKeys.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle + /// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol). + /// + internal static System.Drawing.Icon icons8_keyboard_96 { + get { + object obj = ResourceManager.GetObject("icons8-keyboard-96", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/PicoKeys/Properties/Resources.resx b/PicoKeys/Properties/Resources.resx new file mode 100644 index 0000000..fb73e69 --- /dev/null +++ b/PicoKeys/Properties/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + ..\Resources\icons8-keyboard-96.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/PicoKeys/Properties/Settings.Designer.cs b/PicoKeys/Properties/Settings.Designer.cs new file mode 100644 index 0000000..f5285ae --- /dev/null +++ b/PicoKeys/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 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 + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/PicoKeys/Properties/Settings.settings b/PicoKeys/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/PicoKeys/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/PicoKeys/Resources/icons8-keyboard-96.ico b/PicoKeys/Resources/icons8-keyboard-96.ico new file mode 100644 index 0000000000000000000000000000000000000000..e5035cbb531bca7a16875897b3ee3c5e0c46fcd8 GIT binary patch literal 6391 zcmbt(c{E$w`}av=sF`ZjOh@gl)>Kksw5Im9=x8Q-%~Mphh7yTt=`D&5hK5Es{|3?;r2_?yR$N&a*$~89w_tXFq!%008lRyA1@W z0zYK|K!$hz_Z1r}F=2UO-l^Ed3+C5$dv}jL0=z$$JMX;#K=%Db^K&;MMyTUKNlGN- z}-DQ2H&x9ossfjJ(BbFC1xi*O= zL)NiFD~Z*<6Z>`hPeJYIC=g)GhD)E)7ZoEy zpVT`}h5LdUJF&2hPY?#uq^^6PMN>O!WUzW)R+t&_h3`ZJ^)N9#nTY3Q68>{yl%aK%{uF9}{i%%6c6qZWy19#9_ zQAO&g_{~uvca;w$O}l+O;P;ZDp_nPPlu>-l+yMEYo+2&hCvuz66iNq=K@)^rK&slp zMuCW#8=ZqG9Rp+aHk2tV)ydhyOS!H{Tg4h=o)#b%<&6p7c4&Lx*d|&G(Vb)+nFj=V z-zc`W;DFR`d(a#Ow^KTF(Goi)?&!G4{MkqEYz6;pc{j=Hy|{PVX4M-Zs|ziT5{@mS zrWBN-GWLP%_$1|OfqBDLeAZ7-fqR!)xnZCycF6>&K&~>n?fpul7GP`7ch6lo&(BY_ zr&mn46q7(v=LRTUTwsFtygLn1G6YedQrh|#%srNyhr%f39-8^%%o%ywQ7%E$N;qMOt!w+B6ecF^?TqMU7wVU zQ4dZ^z!pJX&9r8&#uvex$l+N&mOS)Gww(nQ4m@Iw6Em#afp$C8{n0+a() zhRleEiBj&f;wY;80FY}z(Ao}eEU)AAwsuPB?gtJvQ!?aH@rSD(NT@g#xKJfKebX(D zpQn~h+y1qo+;_&^x$4&hl|VvU(D%n}eD5~42=t!#Tvh-`%Gue5bD?*$yS8dR$4~_4 z;{`tc6(qm*+`X`A5)$^JQwSDJ;xCPZgHL;uNVb{bzZlF6eSG&0NKIpu+j7l-M&w~N z5lgw8`bcp2+}EsxNK~VXMtN3Wg_UBIXvBeqz3!8GtuY5a3)fq|0!4h)Ir;ZfP^lJ> z_VZ5rnVf;=Ftx%NFdcfH0LDmYY)(ZiA9oOu~O74GYO`gBKY2IH7U(kDO61V-puyuS>nS3IlKR)Ns zIGZ$b$n1VHca#{c&k;Srm#!`*Y(TV+nSmz_a0ZW}lk^}dW%Ze)+t|>#hlaL*?UYgM zFkaN=S?P9-{8mbSA-nVe0p!AWT365l;mHSLg8?7W(*QLDu_+A5xh-e%54OKtT3<>i zNDdV6X>k`{i|jKq61?EU^cV=^JNv6lqm${=pTE7+yz#F7i0d4-IbyJbfLNF&ybY%? zwUqzpSIrGvXf>^4G7QI!(AY@v3v-RhC!2^d$k$SV^SWzY=W}Q3>uD_1qlpfAs??;vd~;e54!rUPF24KeS>@PvVkl9L zEQ-jexH7TB#B$&5w89vllGn1}AXR41DyTWhT{*9cWcST5s2Hk{Ts!zriPXmPy1DHO zq}jFn0J>veUd^dKxrPvDk6`)ru8o=m3!Gr@Wa#`Pi#t}^e+@2K+=7CfO&I1jZxP&a zXbpp3DqEw3J>(EY*rq+uMm5>!=aQ@K+{PX4T_J){JAb8sFHSn{{hzyE4ZAe-1`a4B z|FD2!pdKniMhi(sA|`RY|9oWVB@@zR=F1Es8VsTeE0H4<{7&~0cB(kMm?lToFUwfD zt^bdcR36k{-=d>zg}rVIQZ)?VO)8e-mGSR%SWRWfJ%(O1AokE~=Dhw4vs}ozj zXe#~AefT5ezbdDeGhz>DZNoB+6NeXxdwWTK4i`J!@2wSZanUQ-WVRM>ZZg$fT9%Ep zQw#Tvgqr^olOQdiCT3%h&1d+!Ye%t3pRZcN<0;jCC^DBT->1VaChjfUcuuMRr%KQt7nzVjD;@FF0|f9%J8F;Dmfs+gp`W^ zJxX%?z0pNSp;Kc_h#C>g$Js|$E(-@+4aX=qxCXQj$ZR)m)U7q(*v=rgROOk5i}F7S zQ@5MQ+4?vz?q$D(Vhiq)m>?;DRMDIv(} z9_ne{8;*R=e0aAX0mZPDnwS@|V6RhGP99X~pWET_F;^XbPV;;HbBn-{>xWVMHe<+f zL_1bA+qYJAU}ekYyb6v_p+QJwO~9f_T=odXgwSdx`k=XK>aq zX4a+EA^C*n>L2ER(ks#ra8x+dxy=u@Mq*91(VCKw%gN&p;KIQ0`FZEwx7O|-2R+|Z zj@+H*qa(smFnR+q&s%Y3S&(^0ue(R-nnxFpvMx$Z*fesQFe6_3jz$g2aoaOi7r9@c zkzb|Iy^6hw-J76(b~7%WVG_JTU=Iec{#SzZ)aoc+}4XLvWS zH#uE^Gf@Cy;##UAPo%xJS*0l7lE_S;d}Zv6WOhzfVtzm}H5;Y)BPO#@hDUo^*aq}J>prGe5*KGIXD0EsCqOi)#tKh>-0(k^|S_S znin1rB7G5Z=JJ5vHnO6TIVs{t!i^iopg)OJ7*a$wcd8xlq%^dzL=OqB0r5N3< za%R_b!nl0|PRT@>ae-fxTE|#;%$bvzOV`QUO(_c56=%XHZdEU{3>R1&?b|Zb0mR@3 zTzj%3-5#<+QQ6tlz&$#^-9sxeQ}5eB7l=22P2=Mu-(wQ^$(c<;eS@4@S z?s!Vh21h+SBi=JIg`2;}&KQo4;VcqsL{7S4eGm<~s@EhN_;maU8@6Oz^xo}{@JF=} zAbP7EK8Se(q{gnCVYnF_7~R(;L>9V6LLo3M@YLB(Jh&dcl0Xc73jh9bKHY8V3+3FQ zdkkKo=u)IN>=K*`6`|zFM^Fe!2|VLOVBCln%Kht3FSwtRQWFR^gj?8iwxAwo^opXpyVR1BMw>bpB~ zs@eppA-ADTwUAgAM_kALdd9 z6oa!y&yh0?1v{%K4~v zDg(PlMx(w5pKM6u+ILdDvTH;aOIr35j~~yh;hznP#l@^7jtui^6FnK|>jxs8Ro)^s zaRLdNvq9V4JBPc9?3s+Hq>K`2oODT>0)Ljz3p@WY-mGS(1SqI9ITN!Ec9Nso`iPTu z*sY9w!Kie!ML1kNaXEQQ+N!Q|*l}WWu%<04jd+{m~( zD*3KZSw&+^rE!CvZTZB{IMhm>!sMn1imKt;{RiL~;Rpvb#g=f@GR`RQ3&^ER_`%N7 ze!t7M((QKxXfL5%0X00-mvyi^yvn+gu|FD7wsf0+y6#-zaQ53Ie)s5~G^9&ZXot9H zRyN>Jc7_G3>WqT(Y9E5-{Q`o=!Ld5K%p@@e(2_aM8a=j9Jz4t)5QqUj`ymqZV~OGm z-hWYhwDOgSzdX-DGCx!cj4}blGZV0jK%GKyeB01f3HPN@;~U8h=j3++(!ANjloxK` z;-{1JyC-@EYI&7R9+vN3-&x{%4w!grJlV^(A2BzAWR9Ez%;Usc>I%OZwsV}H zn1fUgPgS4Wb{g0$?5NJ!?2qkJm52o!O=w@m@)kP392joUqEjBch1sh;U)tiXW=bLd zA$4B|+RpNs0{*g9e*o2#L95&|YEU)kW7a0m_Tk~BV87Zo{+q)}%F~zD00aGZ`{S*Q zH=u7oblmH$^o^c9hTB#I+X?Dz>Qt>mu#JbeTxw8>_z%+5_AE7gY^|chaFR0;9FFBM zbjky9cUB(hT<$zYk4@RRM;(${W1=>VojF+uK6wwpr?7uwJtS6GYu#aq2(^}qGbvhY z4pUlANolf&W7v;Q5<8NOl8#{m-@L0C0vd6| zY_<}+*>rn1+9-t+D=**?%NWNz zee0y7rJ&ebB+Pf?invFEVe)`jA9!y{s`4={ge&@He9s)0{BCNEJM9H;WDWlOdI<*` zZmg}pA`>}4p;m8T!Ky#}E3fN>rqEzvtAc|Xu2IqKKHc+e=N)B6-ZY=OAr>PPp%f9f zuGm`2M?6D!BPYbR7GW3tu@W^E>Th3a>gqs|^j{yOBcrHS90Mm)%|3?Z_GWWTJ?_s+ zrGz9We@Z<_QZ;T}(WZ+oI6ie1K_6RK;`+qG9N8{DN5cD$tgP>|ZPUiQ$`ZN$ad^q5 zn<1;0Ff8r8f%s%cJML!(qPG$g$0Gk`;)T(i){6m1elPQflA0pnCK-ma$^mtQDi^DY zlJ$mf;erZ5JqivzaR(279}k&QqEVRZog=sMPU1!=Pba?MYo(4`A2^kl4W{&`5R{TR z%y|a<3j`x_@{<}tOFzZ z+UHjLfb?p5bqcO%HyB9)Q_AX#u+CN^Auvuk7a^Qc@N(qVL<9C z@c1$BVjpnmEg&hykA8d{F#kVYZN9_L^+BC_J~~=>W`b;xhg>@zBYBl^6ZLFS;w&Jl zbC~b2NP~suN`zbr07Mb46$XVsoPdXX1-^;&v}mGmK= zf3|nnvHYeQxlgn!`j+o_MJ9VUSO!0M7-em$X%N};C;rma7Mjzb+iz6|fuiEqh^u#k zymAI?8nqIJjcq-zu_NSi!fJAzUpU(&=d+4n-xz`_z(BzF_O{jg87~>U9mFpGv`20S z=BWbaH+~N!5t2)*+UqgK*k91k_jkCP|GED}VFdKun2lG!*Xcd`odu=E)ZWR&pdD@5 zA{^_v3##z0T5cO3Z%^oQS%af;w8Wql0qz8MV+cBO&oy$I1c|3{DKT6_+r{=`4w(X* zC&7Avp+rV+_~Fz~jrA0XB2HX18zO>ka8O}4Hec9<0gJG<>2Nye3cCWcm^Z2MQ3J<{ zE8(i9O!Cwzm+Y#$@~=7`jtnaEWAd!h?B6nGZlcf(!O$IXBOojoxxW2wSCYCbneY-b z_xy{uP5J*A$^UzhlhTc|q;J;@T1_UCK)<88j=IuHLqptmE&UrGO7ph_O5)i*-p5)k zf)QD9XJZ6qfT(g47W=oPjU}XlU<)!>g33Ttg$e6){qfyI19{=wYpjj{hsbe}HZ73Yu#gciv;xncUM9 z2@~K`{5Y`OhE6iB_moU?y;{tBg`PHDE)aBo->Ry;1P<3?mG$e~7gC30pv_E` z=6&IbqRGcn?St;t`d8v*fFQCVkp^@>uakYWQQOw@{$?`g{D9pkUJh8i*-YU3bip<0 zJ@T~nnWC!4ju4q*J$wM@3SeJsZQk-wfU%pn|9!iY$dx!!m0{w17juU9=>oWDVPjr; I-u=P<043w6c>n+a literal 0 HcmV?d00001 diff --git a/PicoKeys/Resources/icons8-keyboard-96.png b/PicoKeys/Resources/icons8-keyboard-96.png new file mode 100644 index 0000000000000000000000000000000000000000..b8655737f23cf5b33a8410fa496a343dde6ebfd8 GIT binary patch literal 856 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 I-u=P<043w6c>n+a literal 0 HcmV?d00001 diff --git a/PicoKeys/packages.config b/PicoKeys/packages.config new file mode 100644 index 0000000..8bea25d --- /dev/null +++ b/PicoKeys/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file