annotate ShortcutKeyFinder/Hotkey.cs @ 0:209d9210c18f default tip

It works.
author Brad Greco <brad@bgreco.net>
date Sat, 25 Jun 2016 13:42:54 +1000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
1 using System.Collections.Generic;
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
2 using System.Windows.Forms;
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
3
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
4 namespace ShortcutKeyFinder
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
5 {
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
6 /// <summary>Provides a means to encode and decode hotkeys in the format expected by the Win32 API</summary>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
7 class Hotkey
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
8 {
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
9 private List<Keys> _modifierKeys = new List<Keys>() { Keys.ShiftKey, Keys.ControlKey, Keys.Menu };
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
10 // Windows API values
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
11 public ushort HOTKEYF_SHIFT = 0x01 << 8;
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
12 public ushort HOTKEYF_CONTROL = 0x02 << 8;
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
13 public ushort HOTKEYF_ALT = 0x04 << 8;
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
14 public ushort HOTKEYF_EXT = 0x08 << 8;
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
15
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
16 /// <summary>Raw hotkey value to use in Win32 functions</summary>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
17 public ushort RawHotkey { get; set; }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
18
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
19 /// <summary>Shift key state</summary>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
20 public bool Shift
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
21 {
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
22 get { return (RawHotkey & HOTKEYF_SHIFT) != 0; }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
23 set { if (value) RawHotkey |= HOTKEYF_SHIFT; else RawHotkey &= (ushort)~HOTKEYF_SHIFT; }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
24 }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
25
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
26 /// <summary>Control key state</summary>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
27 public bool Control
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
28 {
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
29 get { return (RawHotkey & HOTKEYF_CONTROL) != 0; }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
30 set { if (value) RawHotkey |= HOTKEYF_CONTROL; else RawHotkey &= (ushort)~HOTKEYF_CONTROL; }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
31 }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
32
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
33 /// <summary>Alt key state</summary>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
34 public bool Alt
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
35 {
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
36 get { return (RawHotkey & HOTKEYF_ALT) != 0; }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
37 set { if (value) RawHotkey |= HOTKEYF_ALT; else RawHotkey &= (ushort)~HOTKEYF_ALT; }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
38 }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
39
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
40 /// <summary>Ext key state</summary>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
41 /// <remarks>Probably useless nowadays</remarks>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
42 public bool Ext
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
43 {
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
44 get { return (RawHotkey & HOTKEYF_EXT) != 0; }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
45 set { if (value) RawHotkey |= HOTKEYF_EXT; else RawHotkey &= (ushort)~HOTKEYF_EXT; }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
46 }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
47
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
48 /// <summary>The key code portion of the hotkey data</summary>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
49 /// <remarks>The key code is stored in the lower byte of the hotkey</remarks>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
50 public byte KeyCode
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
51 {
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
52 get { return (byte)(RawHotkey & 0x00FF); }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
53 set { RawHotkey = (ushort)((RawHotkey & 0xFF00) | value); }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
54 }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
55
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
56 /// <summary>Default constructor</summary>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
57 public Hotkey() { }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
58
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
59 /// <summary>Constructor with hotkey initializer</summary>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
60 /// <param name="hotkey">Hotkey value for Win32 API calls</param>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
61 public Hotkey(ushort hotkey)
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
62 {
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
63 RawHotkey = hotkey;
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
64 }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
65
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
66 /// <summary>Converts the hotkey data into a friendly string</summary>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
67 public override string ToString()
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
68 {
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
69 return string.Format("{0}{1}{2}{3}{4}",
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
70 Control ? "Ctrl+" : "",
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
71 Alt ? "Alt+" : "",
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
72 Shift ? "Shift+" : "",
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
73 Ext ? "Ext+" : "",
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
74 _modifierKeys.Contains((Keys)KeyCode) ? "" : new KeysConverter().ConvertToString((int)KeyCode));
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
75 }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
76
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
77 /// <summary>Checks if two Hotkey objects have the same key combination</summary>
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
78 public override bool Equals(object obj)
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
79 {
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
80 Hotkey hotkey = obj as Hotkey;
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
81 return hotkey != null && hotkey.RawHotkey == RawHotkey;
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
82 }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
83
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
84 public override int GetHashCode()
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
85 {
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
86 return RawHotkey.GetHashCode();
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
87 }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
88 }
209d9210c18f It works.
Brad Greco <brad@bgreco.net>
parents:
diff changeset
89 }