Projektdateien hinzufügen.

This commit is contained in:
Manuel Kamper 2024-11-16 11:59:31 +01:00
parent e3dda28358
commit 951e6da8cd
16 changed files with 1112 additions and 0 deletions

25
PicoKeys.sln Normal file
View File

@ -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

6
PicoKeys/App.config Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
</configuration>

284
PicoKeys/Main.Designer.cs generated Normal file
View File

@ -0,0 +1,284 @@
namespace PicoKeys
{
partial class Main
{
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Verwendete Ressourcen bereinigen.
/// </summary>
/// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
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;
}
}

171
PicoKeys/Main.cs Normal file
View File

@ -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);
}
}
}

235
PicoKeys/Main.resx Normal file
View File

@ -0,0 +1,235 @@
<?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>
<metadata name="contextMenuStripTrayIcon.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<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>

97
PicoKeys/PicoKeys.csproj Normal file
View File

@ -0,0 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{6D00FACA-731C-4C74-AD4C-8197EB6EFDFF}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>PicoKeys</RootNamespace>
<AssemblyName>PicoKeys</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>icons8-keyboard-96.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="AudioSwitcher.AudioApi, Version=3.0.0.209, Culture=neutral, PublicKeyToken=fda5729e2db3a64f, processorArchitecture=MSIL">
<HintPath>..\packages\AudioSwitcher.AudioApi.3.0.0\lib\net40\AudioSwitcher.AudioApi.dll</HintPath>
</Reference>
<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="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Main.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Main.Designer.cs">
<DependentUpon>Main.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Main.resx">
<DependentUpon>Main.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<SubType>Designer</SubType>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="icons8-keyboard-96.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

22
PicoKeys/Program.cs Normal file
View File

@ -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
{
/// <summary>
/// Der Haupteinstiegspunkt für die Anwendung.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Main());
}
}
}

View File

@ -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")]

View File

@ -0,0 +1,73 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
namespace PicoKeys.Properties {
using System;
/// <summary>
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
/// </summary>
// 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() {
}
/// <summary>
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
/// </summary>
[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;
}
}
/// <summary>
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Icon ähnlich wie (Symbol).
/// </summary>
internal static System.Drawing.Icon icons8_keyboard_96 {
get {
object obj = ResourceManager.GetObject("icons8-keyboard-96", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
}
}

View File

@ -0,0 +1,124 @@
<?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.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="icons8-keyboard-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-keyboard-96.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

30
PicoKeys/Properties/Settings.Designer.cs generated Normal file
View File

@ -0,0 +1,30 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
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;
}
}
}
}

View File

@ -0,0 +1,7 @@
<?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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

5
PicoKeys/packages.config Normal file
View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="AudioSwitcher.AudioApi" version="3.0.0" targetFramework="net48" />
<package id="AudioSwitcher.AudioApi.CoreAudio" version="3.0.3" targetFramework="net48" />
</packages>