using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace TibisMathematicsSuite.KeyboardIO { public static class Hotkey { private static HotkeyWindow window = new HotkeyWindow(); private static int currentId = 0; public static event EventHandler HotkeyPressed { add { window.HotkeyPressed += value; } remove { window.HotkeyPressed -= value; } } #region Winapi routines // Registers a hot key with Windows. [DllImport("user32.dll")] private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk); // Unregisters the hot key with Windows. [DllImport("user32.dll")] private static extern bool UnregisterHotKey(IntPtr hWnd, int id); #endregion public static void Register(MyKey key) { currentId++; if (!RegisterHotKey(window.Handle, currentId, (uint)key.Mods, (uint)key.Key)) throw new InvalidOperationException("Could not register the hotkey!"); } public static void UnregisterAll() { for (; currentId > 0; currentId--) UnregisterHotKey(window.Handle, currentId); } } }