math-suite/Source/TibisMathematicsSuite/KeyboardIO/Hotkey.cs

45 lines
1.3 KiB
C#

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<MyKeyEventArgs> 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);
}
}
}