/// <summary> 将按下的按键转换为键盘上的按键名称 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void KeyName_textBox_KeyDown(object sender, KeyEventArgs e) { TextBox CurrentControl = (TextBox)sender; CurrentEntity.ShortCutKey = e.KeyValue.ToString(); CurrentControl.Text = UniversalMethod.GetKeyName(CurrentEntity.ShortCutKey); }
private void SelectProgram_button_MouseDown(object sender, MouseEventArgs e) { Task.Run(() => { while (Control.MouseButtons != MouseButtons.None) { var HandleInt = WindowsAPI.WindowFromPoint(Control.MousePosition.X, Control.MousePosition.Y); WindowsAPI.GetWindowThreadProcessId(new IntPtr(HandleInt), out int ProgramID); var ProcessObj = Process.GetProcessById(ProgramID); if (ProcessObj == null) { Thread.Sleep(100); continue; } this.Invoke(new Action(() => { try { var FaileName = ProcessObj.Modules[0].FileName; Target_pictureBox.Image = UniversalMethod.GetImageByFileName(FaileName); } catch { } Program_textBox.Text = ProcessObj.ProcessName; })); Thread.Sleep(100); } }); }
/// <summary> /// 获取当前已激活的进程信息 /// </summary> /// <returns></returns> public ProgramInfoTemp GetForeProgramInfo() { try { var ForegHandle = WindowsAPI.GetForegroundWindow(); WindowsAPI.GetWindowThreadProcessId(ForegHandle, out int ProgramID); var ProcessObj = Process.GetProcessById(ProgramID); if (ProcessObj == null) { return(null); } var ResultObj = ProgramInfoList.FirstOrDefault(T1 => T1.Name == ProcessObj.ProcessName); if (ResultObj != null) { return(ResultObj); } var FileName = ProcessObj.Modules[0].FileName; var ForeImage = UniversalMethod.GetImageByFileName(FileName); var ForeImgHex = UniversalMethod.ByteArayToHex(ForeImage.ToByteArray()); ResultObj = new ProgramInfoTemp(); ResultObj.Name = ProcessObj.ProcessName; ResultObj.Img = ForeImage; ResultObj.ImgHex = ForeImgHex; ProgramInfoList.Add(ResultObj); return(ResultObj); } catch { return(null); } }
/// <summary> 特殊按钮被点击 /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SpecialKey_button_Click(object sender, EventArgs e) { frmShortcutKey_Edit_SpecialKey frm = new frmShortcutKey_Edit_SpecialKey(); if (frm.ShowDialog() == DialogResult.OK) { string KeyNum = frm.KeyNum; CurrentEntity.ShortCutKey = KeyNum; KeyName_textBox.Text = UniversalMethod.GetKeyName(CurrentEntity.ShortCutKey); } }
/// <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> 刷新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="Parent">父节点ID,为空则为根节点</param> private void ShowKey(string ParentID = null) { List <tShortCutKey> tShortCutKeyTempList = null; if (string.IsNullOrEmpty(ParentID)) { tShortCutKeyTempList = tShortCutKeyDataSource.Where(T1 => string.IsNullOrEmpty(T1.ParentID)).ToList(); } else { tShortCutKeyTempList = tShortCutKeyDataSource.Where(T1 => T1.ParentID == ParentID).ToList(); } //将tShortCutKey转换成vShortCutKey CurrentNodetShortCutKey = tShortCutKeyTempList.Select(T1 => UniversalMethod.ClassToClass <tShortCutKey, vShortCutKey>(T1, new vShortCutKey())).ToList(); CurrentNodetShortCutKey.ForEach(T1 => T1.OwningChidrenNode = OwningChidren(T1));//加入是否有下级节点 //keyLayoutShow.DataSource = CurrentNodetShortCutKey; }
/// <summary> /// 添加一个快捷键 /// </summary> public void AddtShortcutKey(tShortCutKey Param) { Task.Delay(100).ContinueWith(task => { Invoke(new Action(() => { Param.ShortCutKeyImg = UniversalMethod.ByteArayToHex(OfficeTools.Resource.Image.Image.ShortcutKeyDefualtImage.ToImage().ToByteArray()); frmShortcutKey_Edit frm = new frmShortcutKey_Edit(Param); string NewID = ""; if (frm.ShowDialog() == DialogResult.OK) { NewID = new ShortcutKeyManageService().AddShortCutKey(frm.CurrentEntity); if (!string.IsNullOrEmpty(NewID)) { InitKeyList(); } } })); }); }
private void FillContent() { if (CurrentEntity == null) { return; } Img_pictureBox.Image = CurrentEntity.ShortCutKeyImg.ToImage(); Name_textBox.Text = CurrentEntity.ShortCutKeyName; Target_pictureBox.Image = CurrentEntity.TargetProgramImg.ToImage(); Program_textBox.Text = CurrentEntity.TargetProgramName; KeyName_textBox.Text = UniversalMethod.GetKeyName(CurrentEntity.ShortCutKey); TypeName_textBox.Text = UniversalMethod.GetTypeName(CurrentEntity.ShortCutKeyType); if (CurrentEntity.ShortCutKeyType == 2) { Path_panel.Visible = false; SysShortcutKey_textBox.Text = CurrentEntity.ShortCutKeyPath; } else { Path_panel.Visible = true; Path_textBox.Text = CurrentEntity.ShortCutKeyPath; } LongPress_checkBox.Checked = CurrentEntity.LongPress == 2; string ParentName = "根目录"; if (!string.IsNullOrEmpty(CurrentEntity.ParentID)) { tShortCutKey tShortCutKeyTemp = new ShortcutKeyManageService().GettShortCutKeyList(new tShortCutKey() { ShortCutKeyID = CurrentEntity.ParentID }).FirstOrDefault(); if (tShortCutKeyTemp != null) { ParentName = tShortCutKeyTemp.ShortCutKeyName; } } ParentNode_textBox.Text = ParentName; }
/// <summary> 打开类型被选择 /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SelectType_button_Click(object sender, EventArgs e) { frmShortcutKey_Edit_OpenType frm = new frmShortcutKey_Edit_OpenType(); if (frm.ShowDialog() == DialogResult.OK) { byte TypeNum = frm.tShortCutKeyType; CurrentEntity.ShortCutKeyType = TypeNum; TypeName_textBox.Text = UniversalMethod.GetTypeName(CurrentEntity.ShortCutKeyType); if (TypeNum == 2) { Path_panel.Visible = false; } else { Path_panel.Visible = true; } } }
/// <summary> 确定键单机 /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OK_button_Click(object sender, EventArgs e) { CurrentEntity.ShortCutKeyImg = UniversalMethod.ByteArayToHex(Img_pictureBox.Image.ToByteArray()); CurrentEntity.ShortCutKeyName = Name_textBox.Text; CurrentEntity.TargetProgramImg = UniversalMethod.ByteArayToHex(Target_pictureBox.Image.ToByteArray()); CurrentEntity.TargetProgramName = Program_textBox.Text; if (CurrentEntity.ShortCutKeyType == 2) { CurrentEntity.ShortCutKeyPath = SysShortcutKey_textBox.Text; } else { CurrentEntity.ShortCutKeyPath = Path_textBox.Text; } CurrentEntity.LongPress = LongPress_checkBox.Checked ? 2 : 1; this.DialogResult = DialogResult.OK; this.Close(); }
/// <summary> 以当前选中的快捷键为基础添加一个快捷键 /// /// </summary> /// <param name="IsChidren">[true:添加的快捷键是当前选中的快捷键的子节点;false:添加的选中快捷键的同级快捷键]</param> private string AddtShortcutKey(bool IsChidren = true) { tShortCutKey AddData = new tShortCutKey() { ShortCutKeyName = "新增快捷键", ParentID = "", ShortCutKey = "", ShortCutKeyPath = "", ShortCutKeyType = 0, ShortCutKeyImg = "" }; AddData.ShortCutKeyImg = UniversalMethod.ByteArayToHex(OfficeTools.Resource.Image.Image.ShortcutKeyDefualtImage.ToImage().ToByteArray()); TreeNode CurrentNode = ShortcutKey_otTreeView.SelectedNode; if (CurrentNode != null) { tShortCutKey CurrentEntity = tShortCutKeyDataSource.Where(T1 => T1.ShortCutKeyID == CurrentNode.Name).FirstOrDefault(); if (CurrentEntity != null) { AddData.ParentID = CurrentEntity.ParentID; if (IsChidren) { AddData.ParentID = CurrentEntity.ShortCutKeyID; } } } int KeuNum = GetDefaultKey(AddData.ParentID); if (KeuNum != -1) { AddData.ShortCutKey = KeuNum.ToString(); } string NewID = new ShortcutKeyManageService().AddShortCutKey(AddData); if (!string.IsNullOrEmpty(NewID)) { InitKeyList(); } return(NewID); }
/// <summary> 将按下的按键转换为键盘上的按键名称 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SysShortcutKey_textBox_KeyDown(object sender, KeyEventArgs e) { List <string> KeyList = new List <string>(); if (e.Control) { KeyList.Add("Control"); } if (e.Alt) { KeyList.Add("Alt"); } if (e.Shift) { KeyList.Add("Shift"); } List <Keys> KeysEnumList = new List <Keys>(); KeysEnumList.Add(Keys.Control); KeysEnumList.Add(Keys.ControlKey); KeysEnumList.Add(Keys.LControlKey); KeysEnumList.Add(Keys.RControlKey); KeysEnumList.Add(Keys.Shift); KeysEnumList.Add(Keys.ShiftKey); KeysEnumList.Add(Keys.LShiftKey); KeysEnumList.Add(Keys.RShiftKey); KeysEnumList.Add(Keys.Alt); KeysEnumList.Add(Keys.Menu); KeysEnumList.Add(Keys.LMenu); KeysEnumList.Add(Keys.RMenu); if (!KeysEnumList.Contains(e.KeyCode)) { KeyList.Add(UniversalMethod.GetKeyName(e.KeyValue.ToString())); } SysShortcutKey_textBox.Text = string.Join("+", KeyList); }
/// <summary> 选择文件路径时 /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SelectPath_button_Click(object sender, EventArgs e) { if (CurrentEntity == null) { return; } switch (CurrentEntity.ShortCutKeyType) { case 0: //文件/程序 SelectFilePath.Filter = "所有文件|*.*"; if (SelectFilePath.ShowDialog() == DialogResult.Cancel) { return; } Path_textBox.Text = SelectFilePath.FileName; Img_pictureBox.Image = UniversalMethod.GetImageByFileName(Path_textBox.Text); if (string.IsNullOrEmpty(Name_textBox.Text)) { Name_textBox.Text = Path.GetFileNameWithoutExtension(Path_textBox.Text); } break; } }
/// <summary> 将文件拖拽到窗口后 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_DragDrop(object sender, DragEventArgs e) { System.Array ArrayTemp = ((System.Array)e.Data.GetData(DataFormats.FileDrop)); if (ArrayTemp == null) { return; //不支持的格式直接返回 } List <string> FilePathList = new List <string>(); for (int i = 0; i < ArrayTemp.Length; i++) { FilePathList.Add(ArrayTemp.GetValue(i).ToString()); } #region 获取父ID,使新添加的记录与当前选中节点处于同一级别 string StrParentId = ""; TreeNode CurrentNode = ShortcutKey_otTreeView.SelectedNode; if (CurrentNode != null) { tShortCutKey CurrentEntity = tShortCutKeyDataSource.Where(T1 => T1.ShortCutKeyID == CurrentNode.Name).FirstOrDefault(); if (CurrentEntity != null) { StrParentId = CurrentEntity.ShortCutKeyID; } } #endregion 获取父ID,使新添加的记录与当前选中节点处于同一级别 foreach (string PathItem in FilePathList) { string StrFileName = Path.GetFileNameWithoutExtension(PathItem);//获取快捷键名称 int KeyNum = GetDefaultKey(StrParentId); string StrKeyNum = ""; if (KeyNum != -1) { StrKeyNum = KeyNum.ToString(); //获取默认键编号 } int FileType = 0; //设置打开类型 byte[] ImageByteArray = UniversalMethod.GetImageByFileName(PathItem).ToByteArray(); //获取文件图标 #region 获取快捷方式真实路径 string StrPath = PathItem; string StrExtension = Path.GetExtension(PathItem); if (!string.IsNullOrEmpty(StrExtension))//文件 { if (StrExtension == ".lnk") { WshShell ShellTemp = new WshShell(); IWshShortcut IWshShortcutTemp = (IWshShortcut)ShellTemp.CreateShortcut(PathItem); StrPath = IWshShortcutTemp.TargetPath; StrExtension = Path.GetExtension(StrPath); if (string.IsNullOrEmpty(StrExtension)) { FileType = 1; } } } else//文件夹 { FileType = 1; } Regex RegexTemp = new Regex(@"https{0,1}\:\/\/"); if (RegexTemp.Match(StrPath).Success)//是否是网址 { FileType = 2; } #endregion 获取快捷方式真实路径 #region 实例化AddData tShortCutKey AddData = new tShortCutKey() { ShortCutKeyName = StrFileName, ParentID = StrParentId, ShortCutKey = StrKeyNum, ShortCutKeyPath = StrPath, ShortCutKeyType = (byte)FileType, ShortCutKeyImg = ImageByteArray }; #endregion 实例化AddData string NewID = new ShortcutKeyManageService().AddShortCutKey(AddData); tShortCutKeyDataSource.Add(AddData); } InitKeyList(); }
/// <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); }