private KeyRun GetKeyRun(string CodeParam, bool Create = true) { var KeuRunTemp = KeuRunList.Where(T1 => T1.KeyCode == CodeParam).FirstOrDefault(); if (KeuRunTemp == null && Create) { KeuRunTemp = new KeyRun(ParentForm, CodeParam); KeuRunList.Add(KeuRunTemp); } return(KeuRunTemp); }
/// <summary> 全系统的:鼠标动作捕捉 /// 全系统的:鼠标动作捕捉 /// </summary> /// <param name="param"></param> /// <param name="wParam">动作代码</param> /// <param name="lParam">句柄</param> /// <param name="handle">是否阻止动作</param> private void MouseEvent(MouseHook.MouseHookStruct param, int wParam, Int64 lParam, out bool handle) { handle = false; if (!ControlButton.IsAllPressDown) { return; //是否按下了控制键 } var CodeStr = ""; KeyRun KeuRunTemp = null; switch (wParam) { case 512: //鼠标移动 break; string StrKeyNum = GetScreenKeyNum(); //获取鼠标触发的屏幕键代码 if (string.IsNullOrEmpty(StrKeyNum)) //鼠标是否已经离开的屏幕的边角地区 { IsRun = false; return; } if (IsRun) { return; //如果已经运行过程序避免重复运行这里直接返回 } frmDebug.Log(StrKeyNum); #region 注释说明 //用户如果想要触发角快捷键,一般情况下总会先触发边的快捷键再触发角 //所以如果触发了边则不立即运行快捷键,而进行延时100毫秒在运行, //如果延时期间一担触发了角快捷键则立即启动并终止边快捷键的延迟启动, //所以角快捷键的优先权总是高于边快捷键的,一旦触发角则立即舍弃边 #endregion 注释说明 if (IsScreenAngle(StrKeyNum)) //是否触发的是屏幕的四个角 { if (DelayRunObj != null) { DelayRunObj.StopDlayRun(); //如果之前触发了边快捷键则立即终止它的延时启动 } RunShortcutKeyContens(StrKeyNum, 0); //如果触发了角则直接启动程序 IsRun = true; } else { if (DelayRunObj == null) { DelayRunObj = new DelayRun(ParentForm, RunShortcutKeyContens, StrKeyNum, 100 /*,()=> { IsRun = true; }*/); } DelayRunObj.KeyNum = StrKeyNum; DelayRunObj.ReSetRunTime(); //如果触发了边则延时启动,看后面还会不会触发角 } break; case 513: //鼠标左键按下 CodeStr = "MouseLeft"; break; case 514: //鼠标左键弹起 CodeStr = "MouseLeft"; break; case 516: //鼠标右键按下 CodeStr = "MouseRight"; break; case 517: //鼠标右键弹起 CodeStr = "MouseRight"; break; case 519: //鼠标中键按下 break; case 520: //鼠标中键弹起 break; case 522: //鼠标滚轮滚动 if (0 < param.hWnd) //向上滑动 { if (WhellColingObj.WhellUp.IsOver) //冷却完成 { RunShortcutKeyContens("WheelUp", 0); //启动程序 } WhellColingObj.WhellUp.StartCooling(); //重新开始冷却 } else { if (WhellColingObj.WhellDown.IsOver) //冷却完成 { RunShortcutKeyContens("WheelDown", 0); //启动程序 } WhellColingObj.WhellDown.StartCooling(); //重新开始冷却 } break; } switch (wParam) { case 513: //鼠标左键按下 case 514: //鼠标左键弹起 case 516: //鼠标右键按下 case 517: //鼠标右键弹起 KeuRunTemp = GetKeyRun(CodeStr); break; } switch (wParam) { case 513: //鼠标左键按下 case 516: //鼠标右键按下 KeuRunTemp.DownKey(); if (!MouseKeyList.Any(T1 => T1 == CodeStr)) { MouseKeyList.Add(CodeStr); } break; } switch (wParam) { case 514: //鼠标左键弹起 case 517: //鼠标右键弹起 if (!MouseKeyList.Any(T1 => T1 == CodeStr)) { return; } MouseKeyList.Remove(CodeStr); KeuRunTemp.UpKey( () => { RunShortcutKeyContens(CodeStr, 1); }, //短按 () => { RunShortcutKeyContens(CodeStr, 2); } //长按 ); break; } //统一拦截鼠标操作 switch (wParam) { case 513: //鼠标左键按下 case 514: //鼠标左键弹起 case 516: //鼠标右键按下 case 517: //鼠标右键弹起 case 522: //鼠标滚轮滚动 handle = true; break; } }