public void RegisterHotKey(string Purpose, KeyModifiers modifiers, Keys vk, Action <HotKey> OnPressed)
        {
            HotKey key = RegisteredHotKeys.SingleOrDefault(o => o.Purpose == Purpose);

            if (key == null)
            {
                key = new HotKey()
                {
                    Purpose = Purpose, id = id, fsModifiers = modifiers, vk = vk, OnPressed = OnPressed
                };
                bool issuccess = WinApiMethods.RegisterHotKey(windowHandle, key.id, key.fsModifiers, (uint)key.vk);
                if (!issuccess)
                {
                    key = null;
                    Win32Exception ex = new Win32Exception(Marshal.GetLastWin32Error());
                    if (ex.Message == "Hot key is already registered")
                    {
                        throw ex;
                    }
                }
                else
                {
                    RegisteredHotKeys.Add(key);
                    id++;
                }
            }
            else
            {
                throw new AlreadyMappedException(key);
            }
        }
        public void UnRegisterHotKey(string Purpose)
        {
            HotKey key = RegisteredHotKeys.SingleOrDefault(o => o.Purpose == Purpose);

            if (key != null)
            {
                bool issuccess = WinApiMethods.UnregisterHotKey(this.windowHandle, key.id);
                if (!issuccess)
                {
                    Win32Exception ex = new Win32Exception(Marshal.GetLastWin32Error());

                    throw ex;
                }
                else
                {
                    RegisteredHotKeys.Remove(key);
                }
            }
            else
            {
                throw new KeyNotFoundException(Purpose);
            }
        }
        public void ReplaceHotKey(string Purpose, KeyModifiers modifiers, Keys vk, Action <HotKey> OnPressed)
        {
            HotKey key = RegisteredHotKeys.SingleOrDefault(o => o.Purpose == Purpose);

            if (key != null)
            {
                key.fsModifiers = modifiers;
                key.vk          = vk;
                bool issuccess = WinApiMethods.RegisterHotKey(windowHandle, key.id, key.fsModifiers, (uint)key.vk);
                if (!issuccess)
                {
                    key = null;
                    Win32Exception ex = new Win32Exception(Marshal.GetLastWin32Error());
                    if (ex.Message == "Hot key is already registered")
                    {
                        throw ex;
                    }
                }
            }
            else
            {
                throw new KeyNotFoundException(Purpose);
            }
        }