private vShortCutKey GetVShortCutKey(string KeyNum, int LongPressParam, string TargetName) { vShortCutKey CurrentEntity = null; var EntityList = new List <vShortCutKey>(); if (LongPressParam == 0) { EntityList = CurrentNodetShortCutKey.Where(T1 => T1.ShortCutKey == KeyNum).ToList(); //滚轮和屏幕键不验证长按或短按 } else { EntityList = CurrentNodetShortCutKey.Where(T1 => T1.ShortCutKey == KeyNum && T1.LongPress == LongPressParam).ToList(); } CurrentEntity = EntityList.FirstOrDefault(T1 => T1.TargetProgramName == TargetName); if (CurrentEntity != null) { return(CurrentEntity); } CurrentEntity = EntityList.FirstOrDefault(T1 => string.IsNullOrEmpty(T1.TargetProgramName)); if (CurrentEntity != null) { return(CurrentEntity); } return(null); }
/// <summary> 运行当前节点的某个快捷键 /// 运行当前节点的某个快捷键 /// </summary> /// <param name="KeyNum">当前节点的键代码</param> private bool RunShortcutKeyContens(string KeyNum) { vShortCutKey CurrentEntity = CurrentNodetShortCutKey.Where(T1 => T1.ShortCutKey == KeyNum).FirstOrDefault(); if (CurrentEntity == null) { return(false); } if (CurrentEntity.OwningChidrenNode) { ShowKey(CurrentEntity.ShortCutKeyID); return(true); } if (string.IsNullOrEmpty(CurrentEntity.ShortCutKeyPath)) { return(false); } try { ControlButton.IsRunProgram = true; switch (CurrentEntity.ShortCutKeyType) { case 0: //程序 case 1: // List <string> FilePathList = CurrentEntity.ShortCutKeyPath.Split(' ').ToList(); Regex PathRegex = new Regex(@".*?(\.exe)"); //获取程序路径 Regex ParamRegex = new Regex(@"(?<=.*?(\.exe) ).*"); //获取参数 string PathString = CurrentEntity.ShortCutKeyPath; //程序路径文本 string ParamString = ""; //参数文本 Match PathResultMatch = PathRegex.Match(PathString); if (PathResultMatch.Success) //尾缀为.exe才获取参数,没有的话就视为不带参数的文件夹直接打开 { ParamString = ParamRegex.Match(PathString).Value; PathString = PathResultMatch.Value; } UniversalMethod.RunProgram(PathString, ParamString); //启动程序 break; case 2: //系统组合键 UniversalMethod.KeyBoardDown(GetSysShortcutKey(CurrentEntity.ShortCutKeyPath)); break; } } catch { return(false); } return(true); }
/// <summary> 检查是否拥有子节点 /// </summary> private bool OwningChidren(vShortCutKey KeyEntity) { int ResultCount = tShortCutKeyDataSource.Where(T1 => T1.ParentID == KeyEntity.ShortCutKeyID).Count(); if (ResultCount == 0) { return(false); } else { return(true); } }
/// <summary> 刷新DataGridView /// /// </summary> private void RefreshDataGridView() { string CurrentSelectID = CurrentNode_dataGridView.GetSelectedRowValue("ShortCutKeyID"); TreeNode CurrentNode = ShortcutKey_otTreeView.SelectedNode; List <tShortCutKey> tShortCutKeyListTemp = new List <tShortCutKey>(); if (CurrentNode == null || CurrentNode.Name == "BaseNode") { tShortCutKeyListTemp = tShortCutKeyDataSource.Where(T1 => string.IsNullOrEmpty(T1.ParentID)).ToList(); } else { tShortCutKeyListTemp = tShortCutKeyDataSource.Where(T1 => CurrentNode.Name == T1.ParentID).ToList(); } List <vShortCutKey> vShortCutKeyListTemp = new List <vShortCutKey>();//最终的数据源 foreach (tShortCutKey tShortCutKeyItem in tShortCutKeyListTemp) { vShortCutKey vShortCutKeyTemp = UniversalMethod.ClassToClass <tShortCutKey, vShortCutKey>(tShortCutKeyItem, new vShortCutKey()); vShortCutKeyTemp.Icon = tShortCutKeyItem.ShortCutKeyImg.ToImage(); vShortCutKeyTemp.TargetIcon = tShortCutKeyItem.TargetProgramImg.ToImage(); vShortCutKeyTemp.KeyName = UniversalMethod.GetKeyName(tShortCutKeyItem.ShortCutKey); vShortCutKeyTemp.ShortCutKeyTypeName = UniversalMethod.GetTypeName(tShortCutKeyItem.ShortCutKeyType); vShortCutKeyTemp.OwningChidrenNode = OwningChidren(vShortCutKeyTemp); vShortCutKeyListTemp.Add(vShortCutKeyTemp); } CurrentNode_dataGridView.DataSource = vShortCutKeyListTemp; #region 子节点的话就用颜色区分出来 foreach (DataGridViewRow Rowitem in CurrentNode_dataGridView.Rows) { if (Rowitem.Cells["IsChidren"].Value.ToString() == "True") { DataGridViewCellStyle CellStyleTemp = Rowitem.DefaultCellStyle; CellStyleTemp.BackColor = Color.Blue; //CellStyleTemp.SelectionBackColor = ShortcutKeyItem_Box.ShortcutKeyItem_Box_StateColor.OwiningChidren.Click; } } #endregion 子节点的话就用颜色区分出来 CurrentNode_dataGridView.SetSelectedRowByValue("ShortCutKeyID", CurrentSelectID); }
/// <summary> 运行当前节点的某个快捷键 /// 运行当前节点的某个快捷键 /// </summary> /// <param name="KeyNum">当前节点的键代码</param> private bool RunShortcutKeyContens(string KeyNum, int LongPressParam) { Runing = true; try { var ForegHandle = WindowsAPI.GetForegroundWindow(); WindowsAPI.GetWindowThreadProcessId(ForegHandle, out int ProgramID); var ProcessObj = Process.GetProcessById(ProgramID); var ProgramInfo = GetForeProgramInfo(); var ProgName = ProgramInfo?.Name ?? ""; var ForeImage = ProgramInfo?.Img; var ForeImgHex = ProgramInfo?.ImgHex ?? ""; vShortCutKey CurrentEntity = GetVShortCutKey(KeyNum, LongPressParam, ProgName); if (CurrentEntity == null) { #region 添加新的快捷键 tShortCutKey AddData = new tShortCutKey() { ShortCutKeyName = "新增快捷键", TargetProgramImg = ForeImgHex, TargetProgramName = ProgName, ParentID = CurrentShortcutKeyID, ShortCutKey = KeyNum, LongPress = LongPressParam, ShortCutKeyPath = "", ShortCutKeyType = 0, ShortCutKeyImg = "" }; ((frmShortcutKeyManage)ParentForm).AddtShortcutKey(AddData); return(false); #endregion 添加新的快捷键 } if (CurrentEntity.OwningChidrenNode) { ShowKey(CurrentEntity.ShortCutKeyID); return(true); } if (string.IsNullOrEmpty(CurrentEntity.ShortCutKeyPath)) { return(false); } try { ControlButton.IsRunProgram = true; switch (CurrentEntity.ShortCutKeyType) { case 0: //程序 case 1: // List <string> FilePathList = CurrentEntity.ShortCutKeyPath.Split(' ').ToList(); Regex PathRegex = new Regex(@".*?(\.exe)"); //获取程序路径 Regex ParamRegex = new Regex(@"(?<=.*?(\.exe) ).*"); //获取参数 string PathString = CurrentEntity.ShortCutKeyPath; //程序路径文本 string ParamString = ""; //参数文本 Match PathResultMatch = PathRegex.Match(PathString); if (PathResultMatch.Success) //尾缀为.exe才获取参数,没有的话就视为不带参数的文件夹直接打开 { ParamString = ParamRegex.Match(PathString).Value; PathString = PathResultMatch.Value; } UniversalMethod.RunProgram(PathString, ParamString); //启动程序 break; case 2: //系统组合键 UniversalMethod.KeyBoardDown(GetSysShortcutKey(CurrentEntity.ShortCutKeyPath)); break; } } catch { return(false); } } catch (Exception EX) { throw EX; } finally { Runing = false; } return(true); }