From 057e2281a645a8178ce05f3562b7e3238fc90a7b Mon Sep 17 00:00:00 2001 From: Markus Hofknecht Date: Sat, 1 Jan 2022 19:52:39 +0100 Subject: [PATCH] [Feature] Executable to show the menu (#276), version 1.2.0.9 --- Utilities/SingleAppInstance.cs | 38 ++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/Utilities/SingleAppInstance.cs b/Utilities/SingleAppInstance.cs index 1bd778e..04b7374 100644 --- a/Utilities/SingleAppInstance.cs +++ b/Utilities/SingleAppInstance.cs @@ -5,6 +5,7 @@ namespace SystemTrayMenu.Utilities { using System; + using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Windows.Forms; @@ -31,19 +32,44 @@ namespace SystemTrayMenu.Utilities try { - VirtualKeyCode virtualKeyCodeModifiers = (VirtualKeyCode)Enum.Parse( - typeof(VirtualKeyCode), modifiers.ToString().ToUpperInvariant()); - VirtualKeyCode virtualKeyCodeHotkey = (VirtualKeyCode)Enum.Parse( - typeof(VirtualKeyCode), hotkey.ToString().ToUpperInvariant()); + List virtualKeyCodesModifiers = new List(); + foreach (string key in modifiers.ToString().ToUpperInvariant().Split(", ")) + { + VirtualKeyCode virtualKeyCode = VirtualKeyCode.LWIN; + switch (key) + { + case "ALT": + virtualKeyCode = VirtualKeyCode.MENU; + break; + default: + virtualKeyCode = (VirtualKeyCode)Enum.Parse( + typeof(VirtualKeyCode), key.ToUpperInvariant()); + break; + } - new InputSimulator().Keyboard.ModifiedKeyStroke(virtualKeyCodeModifiers, virtualKeyCodeHotkey); + virtualKeyCodesModifiers.Add(virtualKeyCode); + } + + VirtualKeyCode virtualKeyCodeHotkey = 0; + object virtualKeyCodeHotkeyObject; + if (!Enum.TryParse(typeof(VirtualKeyCode), hotkey.ToString().ToUpperInvariant(), out virtualKeyCodeHotkeyObject)) + { + Enum.TryParse(typeof(VirtualKeyCode), $"VK_{hotkey.ToString().ToUpperInvariant()}", out virtualKeyCodeHotkeyObject); + } + + if (virtualKeyCodeHotkeyObject != null) + { + virtualKeyCodeHotkey = (VirtualKeyCode)virtualKeyCodeHotkeyObject; + } + + new InputSimulator().Keyboard.ModifiedKeyStroke(virtualKeyCodesModifiers, virtualKeyCodeHotkey); success = false; // how to solve with several modifier keys? } catch (Exception ex) { - Log.Warn("Send hoktey to other instance failed", ex); + Log.Warn($"Send hoktey {Properties.Settings.Default.HotKey} to other instance failed", ex); killOtherInstances = true; } }