Mercurial > shortcutkeyfinder
view 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 |
line wrap: on
line source
using System.Collections.Generic; using System.Windows.Forms; namespace ShortcutKeyFinder { /// <summary>Provides a means to encode and decode hotkeys in the format expected by the Win32 API</summary> class Hotkey { private List<Keys> _modifierKeys = new List<Keys>() { Keys.ShiftKey, Keys.ControlKey, Keys.Menu }; // Windows API values public ushort HOTKEYF_SHIFT = 0x01 << 8; public ushort HOTKEYF_CONTROL = 0x02 << 8; public ushort HOTKEYF_ALT = 0x04 << 8; public ushort HOTKEYF_EXT = 0x08 << 8; /// <summary>Raw hotkey value to use in Win32 functions</summary> public ushort RawHotkey { get; set; } /// <summary>Shift key state</summary> public bool Shift { get { return (RawHotkey & HOTKEYF_SHIFT) != 0; } set { if (value) RawHotkey |= HOTKEYF_SHIFT; else RawHotkey &= (ushort)~HOTKEYF_SHIFT; } } /// <summary>Control key state</summary> public bool Control { get { return (RawHotkey & HOTKEYF_CONTROL) != 0; } set { if (value) RawHotkey |= HOTKEYF_CONTROL; else RawHotkey &= (ushort)~HOTKEYF_CONTROL; } } /// <summary>Alt key state</summary> public bool Alt { get { return (RawHotkey & HOTKEYF_ALT) != 0; } set { if (value) RawHotkey |= HOTKEYF_ALT; else RawHotkey &= (ushort)~HOTKEYF_ALT; } } /// <summary>Ext key state</summary> /// <remarks>Probably useless nowadays</remarks> public bool Ext { get { return (RawHotkey & HOTKEYF_EXT) != 0; } set { if (value) RawHotkey |= HOTKEYF_EXT; else RawHotkey &= (ushort)~HOTKEYF_EXT; } } /// <summary>The key code portion of the hotkey data</summary> /// <remarks>The key code is stored in the lower byte of the hotkey</remarks> public byte KeyCode { get { return (byte)(RawHotkey & 0x00FF); } set { RawHotkey = (ushort)((RawHotkey & 0xFF00) | value); } } /// <summary>Default constructor</summary> public Hotkey() { } /// <summary>Constructor with hotkey initializer</summary> /// <param name="hotkey">Hotkey value for Win32 API calls</param> public Hotkey(ushort hotkey) { RawHotkey = hotkey; } /// <summary>Converts the hotkey data into a friendly string</summary> public override string ToString() { return string.Format("{0}{1}{2}{3}{4}", Control ? "Ctrl+" : "", Alt ? "Alt+" : "", Shift ? "Shift+" : "", Ext ? "Ext+" : "", _modifierKeys.Contains((Keys)KeyCode) ? "" : new KeysConverter().ConvertToString((int)KeyCode)); } /// <summary>Checks if two Hotkey objects have the same key combination</summary> public override bool Equals(object obj) { Hotkey hotkey = obj as Hotkey; return hotkey != null && hotkey.RawHotkey == RawHotkey; } public override int GetHashCode() { return RawHotkey.GetHashCode(); } } }