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