示例#1
0
        /// <summary>
        /// 设置当前按钮的状态
        /// </summary>
        /// <param args="KeyExEventArgs">键信息</param>
        /// <param isDown="bool">标识,当前键是否按下</param>
        private void SetButtonStatus(HookEx.KeyExEventArgs args, bool isDown)
        {
            IList <FecitButton> buttonList = FindButtonList(args);    //查找当有键

            if (buttonList.Count <= 0)                                //如果没有找到
            {
                return;                                               //退出本次操作
            }
            short key = (short)args.KeyValue;                         //获取当前键的键值

            if (spacialVKButtonsMap.ContainsKey(key))                 //如果键/值列表中有该键
            {
                if (!isDown)                                          //如果按钮没有被按下
                {
                    FecitButton button = spacialVKButtonsMap[key][0]; //设置按钮的信息
                    button.Checked = !button.Checked;                 //设置当前按钮为按下状态
                }
            }
            else
            {
                foreach (FecitButton button in buttonList) //遍历IList中的所有按钮
                {
                    if (button == null)                    //如果按钮为空
                    {
                        break;                             //退出循环
                    }
                    button.Checked = isDown;               //设置按钮的状态
                }
            }
        }
示例#2
0
        /// <summary>
        /// 在键列表中查找键值
        /// </summary>
        /// <param args="KeyExEventArgs">键信息</param>
        private IList <FecitButton> FindButtonList(HookEx.KeyExEventArgs args)
        {
            short key = (short)args.KeyValue;                                                  //获取键值

            if (key == KeyboardConstaint.VK_LCONTROL || key == KeyboardConstaint.VK_RCONTROL)  //如果是CTRL键
            {
                key = KeyboardConstaint.VK_CONTROL;                                            //记录CTRL键值
            }
            else if (key == KeyboardConstaint.VK_LSHIFT || key == KeyboardConstaint.VK_RSHIFT) //如果是SHIFT键
            {
                key = KeyboardConstaint.VK_SHIFT;                                              //记录SHIFT键值
            }
            else if (key == KeyboardConstaint.VK_LMENU || key == KeyboardConstaint.VK_RMENU)   //如果是ALT键
            {
                key = KeyboardConstaint.VK_MENU;                                               //记录ALT键值
            }
            else if (key == KeyboardConstaint.VK_RWIN)                                         //如果是WIN键
            {
                key = KeyboardConstaint.VK_LWIN;                                               //记录WIN键值
            }

            if (combinationVKButtonsMap.ContainsKey(key))              //如果在IDictionary的集合中
            {
                return(combinationVKButtonsMap[key]);                  //返回当前键的键值
            }
            IList <FecitButton> buttonList = new List <FecitButton>(); //实例化IList<FecitButton>

            foreach (Control ctrl in this.Controls)                    //遍历当前窗体中的所有控件
            {
                FecitButton button = ctrl as FecitButton;              //如果当前控件是FecitButton按钮
                if (button == null)                                    //如果当前按钮为空
                {
                    continue;                                          //重新循环
                }
                short theKey = Convert.ToInt16(button.Tag.ToString()); //获取当前按钮的键值
                if (theKey == key)                                     //如果与当前操作的按钮相同
                {
                    buttonList.Add(button);                            //添加当前操作的按键信息
                    break;
                }
            }
            return(buttonList);
        }
示例#3
0
 //键盘的抬起事件
 private void HookOnGlobalKeyUp(object sender, HookEx.KeyExEventArgs e)
 {
     SetButtonStatus(e, false);
 }
示例#4
0
 //键盘的按下事件
 private void HookOnGlobalKeyDown(object sender, HookEx.KeyExEventArgs e)
 {
     SetButtonStatus(e, true);
 }