From 8d6db8f0f472d0c25446009574e3764eb6fb3bb1 Mon Sep 17 00:00:00 2001 From: Nathan Wittstock Date: Tue, 7 Jul 2020 19:48:37 -0700 Subject: [PATCH] basic feature working --- App.config | 6 ++ Program.cs | 22 +++++ Properties/AssemblyInfo.cs | 36 +++++++++ Properties/Resources.Designer.cs | 103 ++++++++++++++++++++++++ Properties/Resources.resx | 133 +++++++++++++++++++++++++++++++ Properties/Settings.Designer.cs | 30 +++++++ Properties/Settings.settings | 7 ++ Resources/TrayIcon-Source.svg | 95 ++++++++++++++++++++++ Resources/TrayIconDarkLeft.ico | Bin 0 -> 86595 bytes Resources/TrayIconDarkLeft.png | Bin 0 -> 3916 bytes Resources/TrayIconDarkRight.ico | Bin 0 -> 86741 bytes Resources/TrayIconDarkRight.png | Bin 0 -> 4061 bytes Resources/TrayIconLightLeft.ico | Bin 0 -> 86067 bytes Resources/TrayIconLightLeft.png | Bin 0 -> 3390 bytes Resources/TrayIconLightRight.ico | Bin 0 -> 86177 bytes Resources/TrayIconLightRight.png | Bin 0 -> 3479 bytes Resources/build.sh | 6 ++ Swapper.csproj | 92 +++++++++++++++++++++ Swapper.sln | 25 ++++++ Tray.cs | 103 ++++++++++++++++++++++++ 20 files changed, 658 insertions(+) create mode 100644 App.config create mode 100644 Program.cs create mode 100644 Properties/AssemblyInfo.cs create mode 100644 Properties/Resources.Designer.cs create mode 100644 Properties/Resources.resx create mode 100644 Properties/Settings.Designer.cs create mode 100644 Properties/Settings.settings create mode 100644 Resources/TrayIcon-Source.svg create mode 100644 Resources/TrayIconDarkLeft.ico create mode 100644 Resources/TrayIconDarkLeft.png create mode 100644 Resources/TrayIconDarkRight.ico create mode 100644 Resources/TrayIconDarkRight.png create mode 100644 Resources/TrayIconLightLeft.ico create mode 100644 Resources/TrayIconLightLeft.png create mode 100644 Resources/TrayIconLightRight.ico create mode 100644 Resources/TrayIconLightRight.png create mode 100644 Resources/build.sh create mode 100644 Swapper.csproj create mode 100644 Swapper.sln create mode 100644 Tray.cs diff --git a/App.config b/App.config new file mode 100644 index 0000000..5754728 --- /dev/null +++ b/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..34fed34 --- /dev/null +++ b/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace Swapper +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Tray()); + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..cbd3fab --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Swapper")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Swapper")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("841c7493-f8b4-49ab-a963-460cc22a8879")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100644 index 0000000..fe9889b --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// 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 Swapper.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Swapper.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon TrayIconDarkLeft { + get { + object obj = ResourceManager.GetObject("TrayIconDarkLeft", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon TrayIconDarkRight { + get { + object obj = ResourceManager.GetObject("TrayIconDarkRight", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon TrayIconLightLeft { + get { + object obj = ResourceManager.GetObject("TrayIconLightLeft", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon TrayIconLightRight { + get { + object obj = ResourceManager.GetObject("TrayIconLightRight", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/Properties/Resources.resx b/Properties/Resources.resx new file mode 100644 index 0000000..5234ca2 --- /dev/null +++ b/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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\TrayIconDarkLeft.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\TrayIconDarkRight.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\TrayIconLightLeft.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\TrayIconLightRight.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs new file mode 100644 index 0000000..27ffae4 --- /dev/null +++ b/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 Swapper.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/Properties/Settings.settings b/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Resources/TrayIcon-Source.svg b/Resources/TrayIcon-Source.svg new file mode 100644 index 0000000..496e79c --- /dev/null +++ b/Resources/TrayIcon-Source.svg @@ -0,0 +1,95 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/Resources/TrayIconDarkLeft.ico b/Resources/TrayIconDarkLeft.ico new file mode 100644 index 0000000000000000000000000000000000000000..e87516a20e1fc0e0e1aba870b7701d2585260102 GIT binary patch literal 86595 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 literal 0 HcmV?d00001 diff --git a/Resources/TrayIconLightLeft.png b/Resources/TrayIconLightLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..3367e0007356ec92eeb6a61b46e436e9ee9d0636 GIT binary patch literal 3390 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 O2OP0>v?@PDyYx?8Aoi{R literal 0 HcmV?d00001 diff --git a/Resources/TrayIconLightRight.ico b/Resources/TrayIconLightRight.ico new file mode 100644 index 0000000000000000000000000000000000000000..1d0831e6525c40a5f1f0fb17cd16c86a21c656b6 GIT binary patch literal 86177 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 A)&Kwi literal 0 HcmV?d00001 diff --git a/Resources/build.sh b/Resources/build.sh new file mode 100644 index 0000000..e726193 --- /dev/null +++ b/Resources/build.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +convert TrayIconLightLeft.png -define icon:auto-resize=16,32,48,128,256 -compress zip TrayIconLightLeft.ico +convert TrayIconLightRight.png -define icon:auto-resize=16,32,48,128,256 -compress zip TrayIconLightRight.ico +convert TrayIconDarkLeft.png -define icon:auto-resize=16,32,48,128,256 -compress zip TrayIconDarkLeft.ico +convert TrayIconDarkRight.png -define icon:auto-resize=16,32,48,128,256 -compress zip TrayIconDarkRight.ico diff --git a/Swapper.csproj b/Swapper.csproj new file mode 100644 index 0000000..2435de3 --- /dev/null +++ b/Swapper.csproj @@ -0,0 +1,92 @@ + + + + + Debug + AnyCPU + {841C7493-F8B4-49AB-A963-460CC22A8879} + WinExe + Swapper + Swapper + v4.7.2 + 512 + true + true + + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + True + True + Resources.resx + + + + + + ResXFileCodeGenerator + Designer + Resources.Designer.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Swapper.sln b/Swapper.sln new file mode 100644 index 0000000..9f4e12e --- /dev/null +++ b/Swapper.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30128.74 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Swapper", "Swapper.csproj", "{841C7493-F8B4-49AB-A963-460CC22A8879}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {841C7493-F8B4-49AB-A963-460CC22A8879}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {841C7493-F8B4-49AB-A963-460CC22A8879}.Debug|Any CPU.Build.0 = Debug|Any CPU + {841C7493-F8B4-49AB-A963-460CC22A8879}.Release|Any CPU.ActiveCfg = Release|Any CPU + {841C7493-F8B4-49AB-A963-460CC22A8879}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E29DFC32-B0E0-4B08-89E9-3EDBE33751D0} + EndGlobalSection +EndGlobal diff --git a/Tray.cs b/Tray.cs new file mode 100644 index 0000000..96960d7 --- /dev/null +++ b/Tray.cs @@ -0,0 +1,103 @@ +using Swapper.Properties; +using System; +using System.Runtime.InteropServices; +using System.Windows.Forms; + +namespace Swapper +{ + public enum ButtonState + { + Left, + Right + } + + public class Tray: ApplicationContext + { + private NotifyIcon trayIcon; + private ButtonState primaryButton; + + [DllImport("user32.dll")] + public static extern bool SwapMouseButton(bool bSwap); + + public Tray() + { + // Initialize Tray Icon + trayIcon = new NotifyIcon() + { + ContextMenu = new ContextMenu(new MenuItem[] { + new MenuItem("Exit", Exit) + }), + Visible = true, + }; + trayIcon.MouseClick += MouseClick; + + // set current primary state; we need to toggle things quickly to get the current value, + // at least until i figure out something better. + if (SwapMouseButton(true)) + { + PrimaryButton = ButtonState.Right; + } + else + { + SwapMouseButton(false); + PrimaryButton = ButtonState.Left; + } + } + + private void UpdateUI() + { + if (PrimaryButton == ButtonState.Left) + { + trayIcon.Text = "Primary Button: Left"; + trayIcon.Icon = Resources.TrayIconDarkLeft; + } + else if (PrimaryButton == ButtonState.Right) + { + + trayIcon.Text = "Primary Button: Right"; + trayIcon.Icon = Resources.TrayIconDarkRight; + } + } + + public ButtonState PrimaryButton + { + get + { + return primaryButton; + } + set + { + if (value == ButtonState.Left) + { + SwapMouseButton(false); + } + else if (value == ButtonState.Right) + { + SwapMouseButton(true); + } + + primaryButton = value; + UpdateUI(); + } + } + + private void Swap() + { + if (PrimaryButton == ButtonState.Left) PrimaryButton = ButtonState.Right; + else if (PrimaryButton == ButtonState.Right) PrimaryButton = ButtonState.Left; + } + + private void MouseClick(object sender, MouseEventArgs e) + { + if (e.Button != MouseButtons.Left) return; + + Swap(); + } + + void Exit(object sender, EventArgs e) + { + trayIcon.Visible = false; + Application.Exit(); + } + } +}