Refactor hotkey handling in MainWindow.xaml.cs to improve user experience by implementing a visual indicator for active hotkeys and enhancing the feedback mechanism during recording. Adjustments made to ensure better responsiveness and clarity in user interactions.

This commit is contained in:
2026-02-22 12:36:49 -05:00
parent 7f5d80ff68
commit fcd70b699d

View File

@@ -13,136 +13,144 @@ namespace ClipForge
public const uint MOD_WIN = 0x0008; public const uint MOD_WIN = 0x0008;
public const uint MOD_NOREPEAT = 0x4000; public const uint MOD_NOREPEAT = 0x4000;
private static readonly Dictionary<VirtualKey, string> KeyNames = new() // Built in static ctor with TryAdd so duplicate VirtualKey enum values (e.g. Kana/Hangul = 0x15) don't throw.
private static readonly Dictionary<VirtualKey, string> KeyNames = new();
static HotkeyHelper()
{ {
{ VirtualKey.LeftButton, "LMB" }, TryAdd(VirtualKey.LeftButton, "LMB");
{ VirtualKey.RightButton, "RMB" }, TryAdd(VirtualKey.RightButton, "RMB");
{ VirtualKey.Cancel, "Cancel" }, TryAdd(VirtualKey.Cancel, "Cancel");
{ VirtualKey.Back, "Backspace" }, TryAdd(VirtualKey.Back, "Backspace");
{ VirtualKey.Tab, "Tab" }, TryAdd(VirtualKey.Tab, "Tab");
{ VirtualKey.Clear, "Clear" }, TryAdd(VirtualKey.Clear, "Clear");
{ VirtualKey.Enter, "Enter" }, TryAdd(VirtualKey.Enter, "Enter");
{ VirtualKey.Shift, "Shift" }, TryAdd(VirtualKey.Shift, "Shift");
{ VirtualKey.Control, "Ctrl" }, TryAdd(VirtualKey.Control, "Ctrl");
{ VirtualKey.Menu, "Alt" }, TryAdd(VirtualKey.Menu, "Alt");
{ VirtualKey.Pause, "Pause" }, TryAdd(VirtualKey.Pause, "Pause");
{ VirtualKey.CapitalLock, "Caps Lock" }, TryAdd(VirtualKey.CapitalLock, "Caps Lock");
{ VirtualKey.Kana, "Kana" }, TryAdd(VirtualKey.Kana, "Kana");
{ VirtualKey.Hangul, "Hangul" }, TryAdd(VirtualKey.Hangul, "Hangul"); // same value as Kana on some SDKs; TryAdd skips duplicate
{ VirtualKey.Junja, "Junja" }, TryAdd(VirtualKey.Junja, "Junja");
{ VirtualKey.Final, "Final" }, TryAdd(VirtualKey.Final, "Final");
{ VirtualKey.Hanja, "Hanja" }, TryAdd(VirtualKey.Hanja, "Hanja");
{ VirtualKey.Kanji, "Kanji" }, TryAdd(VirtualKey.Kanji, "Kanji");
{ VirtualKey.Escape, "Escape" }, TryAdd(VirtualKey.Escape, "Escape");
{ VirtualKey.Convert, "Convert" }, TryAdd(VirtualKey.Convert, "Convert");
{ VirtualKey.NonConvert, "NonConvert" }, TryAdd(VirtualKey.NonConvert, "NonConvert");
{ VirtualKey.Accept, "Accept" }, TryAdd(VirtualKey.Accept, "Accept");
{ VirtualKey.ModeChange, "ModeChange" }, TryAdd(VirtualKey.ModeChange, "ModeChange");
{ VirtualKey.Space, "Space" }, TryAdd(VirtualKey.Space, "Space");
{ VirtualKey.PageUp, "PgUp" }, TryAdd(VirtualKey.PageUp, "PgUp");
{ VirtualKey.PageDown, "PgDn" }, TryAdd(VirtualKey.PageDown, "PgDn");
{ VirtualKey.End, "End" }, TryAdd(VirtualKey.End, "End");
{ VirtualKey.Home, "Home" }, TryAdd(VirtualKey.Home, "Home");
{ VirtualKey.Left, "Left" }, TryAdd(VirtualKey.Left, "Left");
{ VirtualKey.Up, "Up" }, TryAdd(VirtualKey.Up, "Up");
{ VirtualKey.Right, "Right" }, TryAdd(VirtualKey.Right, "Right");
{ VirtualKey.Down, "Down" }, TryAdd(VirtualKey.Down, "Down");
{ VirtualKey.Select, "Select" }, TryAdd(VirtualKey.Select, "Select");
{ VirtualKey.Print, "Print" }, TryAdd(VirtualKey.Print, "Print");
{ VirtualKey.Execute, "Execute" }, TryAdd(VirtualKey.Execute, "Execute");
{ VirtualKey.Snapshot, "Print Screen" }, TryAdd(VirtualKey.Snapshot, "Print Screen");
{ VirtualKey.Insert, "Insert" }, TryAdd(VirtualKey.Insert, "Insert");
{ VirtualKey.Delete, "Delete" }, TryAdd(VirtualKey.Delete, "Delete");
{ VirtualKey.Help, "Help" }, TryAdd(VirtualKey.Help, "Help");
{ VirtualKey.Number0, "0" }, TryAdd(VirtualKey.Number0, "0");
{ VirtualKey.Number1, "1" }, TryAdd(VirtualKey.Number1, "1");
{ VirtualKey.Number2, "2" }, TryAdd(VirtualKey.Number2, "2");
{ VirtualKey.Number3, "3" }, TryAdd(VirtualKey.Number3, "3");
{ VirtualKey.Number4, "4" }, TryAdd(VirtualKey.Number4, "4");
{ VirtualKey.Number5, "5" }, TryAdd(VirtualKey.Number5, "5");
{ VirtualKey.Number6, "6" }, TryAdd(VirtualKey.Number6, "6");
{ VirtualKey.Number7, "7" }, TryAdd(VirtualKey.Number7, "7");
{ VirtualKey.Number8, "8" }, TryAdd(VirtualKey.Number8, "8");
{ VirtualKey.Number9, "9" }, TryAdd(VirtualKey.Number9, "9");
{ VirtualKey.A, "A" }, TryAdd(VirtualKey.A, "A");
{ VirtualKey.B, "B" }, TryAdd(VirtualKey.B, "B");
{ VirtualKey.C, "C" }, TryAdd(VirtualKey.C, "C");
{ VirtualKey.D, "D" }, TryAdd(VirtualKey.D, "D");
{ VirtualKey.E, "E" }, TryAdd(VirtualKey.E, "E");
{ VirtualKey.F, "F" }, TryAdd(VirtualKey.F, "F");
{ VirtualKey.G, "G" }, TryAdd(VirtualKey.G, "G");
{ VirtualKey.H, "H" }, TryAdd(VirtualKey.H, "H");
{ VirtualKey.I, "I" }, TryAdd(VirtualKey.I, "I");
{ VirtualKey.J, "J" }, TryAdd(VirtualKey.J, "J");
{ VirtualKey.K, "K" }, TryAdd(VirtualKey.K, "K");
{ VirtualKey.L, "L" }, TryAdd(VirtualKey.L, "L");
{ VirtualKey.M, "M" }, TryAdd(VirtualKey.M, "M");
{ VirtualKey.N, "N" }, TryAdd(VirtualKey.N, "N");
{ VirtualKey.O, "O" }, TryAdd(VirtualKey.O, "O");
{ VirtualKey.P, "P" }, TryAdd(VirtualKey.P, "P");
{ VirtualKey.Q, "Q" }, TryAdd(VirtualKey.Q, "Q");
{ VirtualKey.R, "R" }, TryAdd(VirtualKey.R, "R");
{ VirtualKey.S, "S" }, TryAdd(VirtualKey.S, "S");
{ VirtualKey.T, "T" }, TryAdd(VirtualKey.T, "T");
{ VirtualKey.U, "U" }, TryAdd(VirtualKey.U, "U");
{ VirtualKey.V, "V" }, TryAdd(VirtualKey.V, "V");
{ VirtualKey.W, "W" }, TryAdd(VirtualKey.W, "W");
{ VirtualKey.X, "X" }, TryAdd(VirtualKey.X, "X");
{ VirtualKey.Y, "Y" }, TryAdd(VirtualKey.Y, "Y");
{ VirtualKey.Z, "Z" }, TryAdd(VirtualKey.Z, "Z");
{ VirtualKey.LeftWindows, "Win" }, TryAdd(VirtualKey.LeftWindows, "Win");
{ VirtualKey.RightWindows, "Win" }, TryAdd(VirtualKey.RightWindows, "Win");
{ VirtualKey.Application, "App" }, TryAdd(VirtualKey.Application, "App");
{ VirtualKey.Sleep, "Sleep" }, TryAdd(VirtualKey.Sleep, "Sleep");
{ VirtualKey.NumberPad0, "Num 0" }, TryAdd(VirtualKey.NumberPad0, "Num 0");
{ VirtualKey.NumberPad1, "Num 1" }, TryAdd(VirtualKey.NumberPad1, "Num 1");
{ VirtualKey.NumberPad2, "Num 2" }, TryAdd(VirtualKey.NumberPad2, "Num 2");
{ VirtualKey.NumberPad3, "Num 3" }, TryAdd(VirtualKey.NumberPad3, "Num 3");
{ VirtualKey.NumberPad4, "Num 4" }, TryAdd(VirtualKey.NumberPad4, "Num 4");
{ VirtualKey.NumberPad5, "Num 5" }, TryAdd(VirtualKey.NumberPad5, "Num 5");
{ VirtualKey.NumberPad6, "Num 6" }, TryAdd(VirtualKey.NumberPad6, "Num 6");
{ VirtualKey.NumberPad7, "Num 7" }, TryAdd(VirtualKey.NumberPad7, "Num 7");
{ VirtualKey.NumberPad8, "Num 8" }, TryAdd(VirtualKey.NumberPad8, "Num 8");
{ VirtualKey.NumberPad9, "Num 9" }, TryAdd(VirtualKey.NumberPad9, "Num 9");
{ VirtualKey.Multiply, "Num *" }, TryAdd(VirtualKey.Multiply, "Num *");
{ VirtualKey.Add, "Num +" }, TryAdd(VirtualKey.Add, "Num +");
{ VirtualKey.Separator, "Num ," }, TryAdd(VirtualKey.Separator, "Num ,");
{ VirtualKey.Subtract, "Num -" }, TryAdd(VirtualKey.Subtract, "Num -");
{ VirtualKey.Decimal, "Num ." }, TryAdd(VirtualKey.Decimal, "Num .");
{ VirtualKey.Divide, "Num /" }, TryAdd(VirtualKey.Divide, "Num /");
{ VirtualKey.F1, "F1" }, TryAdd(VirtualKey.F1, "F1");
{ VirtualKey.F2, "F2" }, TryAdd(VirtualKey.F2, "F2");
{ VirtualKey.F3, "F3" }, TryAdd(VirtualKey.F3, "F3");
{ VirtualKey.F4, "F4" }, TryAdd(VirtualKey.F4, "F4");
{ VirtualKey.F5, "F5" }, TryAdd(VirtualKey.F5, "F5");
{ VirtualKey.F6, "F6" }, TryAdd(VirtualKey.F6, "F6");
{ VirtualKey.F7, "F7" }, TryAdd(VirtualKey.F7, "F7");
{ VirtualKey.F8, "F8" }, TryAdd(VirtualKey.F8, "F8");
{ VirtualKey.F9, "F9" }, TryAdd(VirtualKey.F9, "F9");
{ VirtualKey.F10, "F10" }, TryAdd(VirtualKey.F10, "F10");
{ VirtualKey.F11, "F11" }, TryAdd(VirtualKey.F11, "F11");
{ VirtualKey.F12, "F12" }, TryAdd(VirtualKey.F12, "F12");
{ VirtualKey.F13, "F13" }, TryAdd(VirtualKey.F13, "F13");
{ VirtualKey.F14, "F14" }, TryAdd(VirtualKey.F14, "F14");
{ VirtualKey.F15, "F15" }, TryAdd(VirtualKey.F15, "F15");
{ VirtualKey.F16, "F16" }, TryAdd(VirtualKey.F16, "F16");
{ VirtualKey.F17, "F17" }, TryAdd(VirtualKey.F17, "F17");
{ VirtualKey.F18, "F18" }, TryAdd(VirtualKey.F18, "F18");
{ VirtualKey.F19, "F19" }, TryAdd(VirtualKey.F19, "F19");
{ VirtualKey.F20, "F20" }, TryAdd(VirtualKey.F20, "F20");
{ VirtualKey.F21, "F21" }, TryAdd(VirtualKey.F21, "F21");
{ VirtualKey.F22, "F22" }, TryAdd(VirtualKey.F22, "F22");
{ VirtualKey.F23, "F23" }, TryAdd(VirtualKey.F23, "F23");
{ VirtualKey.F24, "F24" }, TryAdd(VirtualKey.F24, "F24");
{ VirtualKey.NumberKeyLock, "NumLock" }, TryAdd(VirtualKey.NumberKeyLock, "NumLock");
{ VirtualKey.Scroll, "Scroll Lock" }, TryAdd(VirtualKey.Scroll, "Scroll Lock");
{ VirtualKey.LeftShift, "Shift" }, TryAdd(VirtualKey.LeftShift, "Shift");
{ VirtualKey.RightShift, "Shift" }, TryAdd(VirtualKey.RightShift, "Shift");
{ VirtualKey.LeftControl, "Ctrl" }, TryAdd(VirtualKey.LeftControl, "Ctrl");
{ VirtualKey.RightControl, "Ctrl" }, TryAdd(VirtualKey.RightControl, "Ctrl");
{ VirtualKey.LeftMenu, "Alt" }, TryAdd(VirtualKey.LeftMenu, "Alt");
{ VirtualKey.RightMenu, "Alt" }, TryAdd(VirtualKey.RightMenu, "Alt");
}; }
private static void TryAdd(VirtualKey key, string name)
{
KeyNames.TryAdd(key, name);
}
/// <summary>Format modifier flags + virtual key as display string (e.g. "Alt + PgUp").</summary> /// <summary>Format modifier flags + virtual key as display string (e.g. "Alt + PgUp").</summary>
public static string ToDisplayString(uint modifiers, uint vk) public static string ToDisplayString(uint modifiers, uint vk)