Пример #1
0
        /// <summary>
        /// 删除热键宿主
        /// </summary>
        public static void PopHost()
        {
            if (msgHost == null)
            {
                throw new ArgumentException("MessageWindow 为空,需要先执行Init()方法!");
            }

            if (hotKeyHosts.Count == 0)
            {
                return;
            }
            IHotKeyHost hotKeyHost = hotKeyHosts.Pop();

            List <Keys> delKeys = new List <Keys>();

            foreach (Keys key in hotKeyDict.Keys)
            {
                if (hotKeyDict[key].Contains(hotKeyHost))
                {
                    hotKeyDict[key].Remove(hotKeyHost);
                }
                if (hotKeyDict[key].Count == 0)
                {
                    // 调用系统API取消注册热键,并从字典中删除该热键
                    Win32API.UnregisterHotKey(msgHost.Hwnd, (int)key);
                    delKeys.Add(key);
                }
            }
            foreach (Keys key in delKeys)
            {
                hotKeyDict.Remove(key);
            }
        }
Пример #2
0
 /// <summary>
 /// 添加热键宿主
 /// </summary>
 /// <param name="hotKeyHost"></param>
 public static void PushHost(IHotKeyHost hotKeyHost)
 {
     if (hotKeyHost == null)
     {
         return;
     }
     hotKeyHosts.Push(hotKeyHost);
 }
Пример #3
0
        private const int WM_HOTKEY = 0x0312; // 如果m.Msg的值为0x0312那么表示用户按下了热键

        /// <summary>
        /// 监视Windows消息
        /// </summary>
        /// <param name="m"></param>
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
            case WM_HOTKEY:
                IHotKeyHost hotKey = HotKeyRegister.CurrentHost;
                if (hotKey != null && hotKey.IsActivated())
                {
                    hotKey.ProcessHotkey((Keys)int.Parse(m.WParam.ToString()));
                }
                break;
            }
            // 将系统消息传递自父类的WndProc
            base.WndProc(ref m);
        }
Пример #4
0
        /// <summary>
        /// 注册热键
        /// </summary>
        /// <param name="vk"></param>
        public static void Register(Keys vk)
        {
            if (msgHost == null)
            {
                throw new ArgumentException("MessageWindow 为空,需要先执行Init()方法!");
            }
            if (hotKeyHosts.Count == 0)
            {
                throw new Exception("热键宿主栈为空异常!");
            }

            IHotKeyHost hotKeyHost = hotKeyHosts.Peek();

            if (!hotKeyDict.ContainsKey(vk))
            {
                // 调用系统API注册热键
                Win32API.RegisterHotKey(msgHost.Hwnd, (int)vk, 0, vk);
                hotKeyDict.Add(vk, new List <IHotKeyHost>());
            }
            hotKeyDict[vk].Add(hotKeyHost);
        }