/// <summary>
        /// 初始化软件软件热键列表,这个方法留着做使用示例吧
        /// </summary>
        private void Init_Software_Hotkey_List()
        {
            Software_Hotkey.Setting setting = new Software_Hotkey.Setting {
                title_regexMatch = @".*?(Microsoft Visual Studio)",
                title_MatchValue = "Microsoft Visual Studio",
                title_MatchGroup = 1,
                class_regexMatch = @"^(HwndWrapper)\[DefaultDomain",
                class_MatchValue = "HwndWrapper",
                class_MatchGroup = 1,
                softwareName     = "Visual Studio"
            };
            Software_Hotkey vSh = new Software_Hotkey(setting);

            vSh.next.HotKey[0].Add(Keys.LShiftKey);
            vSh.next.HotKey[0].Add(Keys.F5);

            vSh.last.HotKey[0].Add(Keys.F5);

            Software_Hotkey.HotKey_Execute vHe1 = new Software_Hotkey.HotKey_Execute();
            Software_Hotkey.HotKey_Execute vHe2 = new Software_Hotkey.HotKey_Execute();
            vHe1.HotKey[0].Add(Keys.F5);
            vHe1.comment = "开始";

            vHe2.HotKey[0].Add(Keys.LShiftKey);
            vHe2.HotKey[0].Add(Keys.F5);
            vHe2.comment = "停止";

            vSh.key_List.Add(vHe1);
            vSh.key_List.Add(vHe2);
            //JSON.stringify()

            vShm.Software_Hotkey_List.Add(vSh);
            vShm.Save_Config();
        }
            /// <summary>
            /// 添加热键项
            /// </summary>
            public void Add_hotKey_item()
            {
                string          comment = win.textBox_hotKey_comment.Text;
                int             index   = win.comboBox_software_list.SelectedIndex;
                Software_Hotkey v_sh    = win.v_kma.vShm.Software_Hotkey_List[index];

                Software_Hotkey.HotKey_Execute v_shhe = new Software_Hotkey.HotKey_Execute();
                v_shhe.comment = comment;

                for (var i = 0; i < v_shhe.HotKey.Length; i++)
                {
                    v_shhe.HotKey[i] = new List <Keys>(win.v_hotKey[i]);
                }

                v_sh.key_List.Add(v_shhe);
                //假装触发一次事件,让列表刷新
                win.v_ce.ComboBox_software_list_SelectionChangeCommitted(win.comboBox_software_list, EventArgs.Empty);
                win.v_kma.vShm.Save_Config();                //保存配置
            }
        /// <summary>
        /// 键盘信息处理
        /// </summary>
        public void Keyboard_Handler(InputHook v_ih, InputHook.Action action)
        {
            Mouse_Auxiliary_button(v_ih, action);              //检测是否按下鼠标辅助键

            //如果按键是弹起操作,并且弹起的是 左 Alt 键, 并且不是正在模拟的状态,就模拟热键 (如果有需要模拟的热键)
            if (action == InputHook.Action.KeyUp && v_ih.keyboard_Input_Record[0].KeyCode == Keys.LMenu && course.be_simulate == false)
            {
                //如果有快捷键列表窗口弹出,就取选中项为放在Alt要执行的热键
                if (new_Window != null)
                {
                    new_Window.Dispose();                 //释放资源
                    new_Window.Close();                   //关闭窗口
                    new_Window = null;                    //恢复初始值方便下次判断

                    //下面是滚轮触发快捷键的关键
                    if (vHe_Lisy != null)
                    {
                        if (vHe_Lisy.Count != 0)                           //如果窗口不是空的
                        {
                            up_Alt_Execute_HotKey = vHe_Lisy[flpList.Selected_Index];
                        }

                        vHe_Lisy   = null;
                        flpList    = null;
                        new_Window = null;
                    }
                }

                //如果有需要执行的组合键
                if (up_Alt_Execute_HotKey != null)
                {
                    course.be_simulate = true;                    //标记为正在模拟
                    //开始模拟,模拟过程是新线程,把 is_simulated 传过去是方便在新线程中取消正在模拟状态
                    up_Alt_Execute_HotKey.Execute(course);
                    up_Alt_Execute_HotKey = null;
                }
                else
                {
                    course.Reinit();                    //没有要执行的键就重新初始化
                }
            }
        }
        /// <summary>
        /// 鼠标辅助按键处理
        /// </summary>
        /// <param name="v_ih"></param>
        /// <param name="action"></param>
        private void Mouse_Auxiliary_button(InputHook v_ih, InputHook.Action action)
        {
            if (v_ih.keyStateAll[Keys.LControlKey] == true &&
                v_ih.keyStateAll[Keys.LShiftKey] == true &&
                v_ih.keyStateAll[Keys.LMenu] == true &&
                course.be_execute == false)
            {
                course.Handle    = v_ih.window_Info_Mouse.Root_IntPtr;             //设置鼠标所在窗口句柄
                course.titleName = v_ih.window_Info_Mouse.Root_title.ToString();
                course.className = v_ih.window_Info_Mouse.Root_className.ToString();
                //减号
                if (v_ih.keyStateAll[Keys.Subtract])
                {
                    course.be_execute = true;                  //标记为正在处理
                    set_be_dispose_mouse();                    //500毫秒后设置 be_dispose_mouse 为false

                    up_Alt_Execute_HotKey = vShm.Get_Last(course.titleName, course.className);
                }

                //加号
                if (v_ih.keyStateAll[Keys.Add])
                {
                    course.be_execute = true;                  //标记为正在处理
                    set_be_dispose_mouse();                    //500毫秒后设置 be_dispose_mouse 为false

                    up_Alt_Execute_HotKey = vShm.Get_Next(course.titleName, course.className);
                }
                ////开启一个线程,512毫秒后设置为false
                void set_be_dispose_mouse()
                {
                    new Thread(new ThreadStart(() => {
                        System.Threading.Thread.Sleep(512);
                        course.be_execute = false;                        //标记为正在处理
                    })).Start();
                }
            }
        }