/// <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; //设置按钮的状态 } } }
/// <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); }
//键盘的抬起事件 private void HookOnGlobalKeyUp(object sender, HookEx.KeyExEventArgs e) { SetButtonStatus(e, false); }
//键盘的按下事件 private void HookOnGlobalKeyDown(object sender, HookEx.KeyExEventArgs e) { SetButtonStatus(e, true); }