Пример #1
0
        /// <summary>
        /// 添加命令按钮事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void addProgram_Click(object sender, EventArgs e)
        {
            String command;

            command = Command.Text.Substring(Command.Text.LastIndexOf('+') + 1);
            LoadConfig writeConfig;
            String     rule = @"[A-Z0-9,./;'\[\\=]|]|-";
            Match      m    = Regex.Match(command, rule);

            if (!m.Success)
            {
                MessageBox.Show("Space+后面的字符必须为A-Z0-9,./;'[]\\-=字符中的一个");
                return;
            }
            //将;[=进行特殊处理
            switch (command)
            {
            case ";":
                command = "sm";
                break;

            case "[":
                command = "lb";
                break;

            case "=":
                command = "eq";
                break;

            default:
                break;
            }
            switch (resourceType.SelectedIndex)
            {
            case 0:
                String fileName = program.FileName;
                if (command.Trim() == "")
                {
                    hi.setHint("请输入指令!");
                    hi.Show();
                    return;
                }
                if (fileName == "")
                {
                    hi.setHint("请选择程序!");
                    hi.Show();
                    return;
                }
                writeConfig = new LoadConfig(Application.StartupPath + @"\command.ini");
                if (args.Text.Trim() != "")
                {
                    fileName += "?" + args.Text.Trim();
                }
                if (resource.Text != "选择文件" && resource.Text.Trim() != "")
                {
                    if (args.Text.Trim() == "")
                    {
                        fileName += "?" + resource.Text.Trim();
                    }
                    else
                    {
                        fileName += " " + resource.Text.Trim();
                    }
                }
                if (writeConfig.ReadIni("Command List", command) != "")
                {
                    DialogResult dr = MessageBox.Show(command + "热键已存在,是否覆盖?", "咒语记混了吗?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                    if (dr == DialogResult.OK)
                    {
                        writeConfig.IniWriteValue("Command List", command.Trim(), fileName);
                    }
                    else if (dr == DialogResult.Cancel)
                    {
                    }
                }
                else
                {
                    writeConfig.IniWriteValue("Command List", command.Trim(), fileName);
                }
                hi.Close();
                Close();
                break;

            case 1:
                String folderName = "explorer.exe?" + folder.Text;
                if (command.Trim() == "")
                {
                    hi.setHint("请输入指令!");
                    hi.Show();
                    return;
                }
                if (folder.Text.Trim() == "")
                {
                    hi.setHint("请选择文件夹!");
                    hi.Show();
                    return;
                }
                writeConfig = new LoadConfig(Application.StartupPath + @"\command.ini");
                if (writeConfig.ReadIni("Command List", command) != "")
                {
                    DialogResult dr = MessageBox.Show(command + "热键已存在,是否覆盖?", "咒语记混了吗?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                    if (dr == DialogResult.OK)
                    {
                        writeConfig.IniWriteValue("Command List", command.Trim(), folderName);
                    }
                    else if (dr == DialogResult.Cancel)
                    {
                    }
                }
                else
                {
                    writeConfig.IniWriteValue("Command List", command.Trim(), folderName);
                }
                hi.Close();
                Close();
                break;

            case 2:
                String url = webSite.Text;
                if (url.Trim() == "")
                {
                    hi.setHint("请输入URL!");
                    hi.Show();
                    return;
                }
                if (!url.Contains(":"))
                {
                    MessageBox.Show(url + "URL格式错误!请加上协议头。");
                    return;
                }
                String site = "explorer.exe?" + url;
                if (command.Trim() == "")
                {
                    hi.setHint("请输入指令!");
                    hi.Show();
                    return;
                }

                writeConfig = new LoadConfig(Application.StartupPath + @"\command.ini");
                if (writeConfig.ReadIni("Command List", command) != "")
                {
                    DialogResult dr = MessageBox.Show(command + "热键已存在,是否覆盖?", "咒语记混了吗?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                    if (dr == DialogResult.OK)
                    {
                        writeConfig.IniWriteValue("Command List", command.Trim(), site);
                    }
                    else if (dr == DialogResult.Cancel)
                    {
                    }
                }
                else
                {
                    writeConfig.IniWriteValue("Command List", command.Trim(), site);
                }
                hi.Close();
                Close();
                break;

            default:
                MessageBox.Show("请选择类型!");
                break;
            }
        }
        /// <summary>
        /// 客户端键盘捕捉事件
        /// </summary>
        /// <param name="hookStruct">由Hook程序发送的按键信息</param>
        /// <param name="handle">是否拦截</param>
        public void KeyPress(KeyBoardHook.HookStruct hookStruct, out bool handle)
        {
            handle = false;
            //全屏程序中禁用
            if (RunningFullScreenApp)
            {
                return;
            }
            //判断是否在打字
            if (hookStruct.vkCode != (int)Keys.Space && flag == false)
            {
                istyping = true;
                t.Start();
                delay.Stop();
            }
            if (istyping == false && (flag == true || (hookStruct.vkCode == (int)(Keys.Space) && hookStruct.flags == 0)))
            {
                if (hookStruct.vkCode == (int)Keys.Space && hookStruct.flags == 0)
                {
                    delay.Enabled = true;
                    delay.Start();
                }
                if (hookStruct.vkCode != (int)Keys.Space && hookStruct.flags == 0)
                {
                    String comtxt = null;
                    if (keycode.ContainsKey(hookStruct.vkCode))
                    {
                        comtxt = keycode[hookStruct.vkCode];
                    }
                    else
                    {
                        comtxt = ((char)hookStruct.vkCode).ToString();
                    }
                    String fileName = ini.ReadIni("Command List", comtxt);

                    if (fileName != "")
                    {
                        keybd_event(8, 0, 0, 0);
                        loading.AnimateImage();
                        loading.Show();
                        lt.Start();
                        handle = true;  //拦截键盘字符
                        String[] progargs = fileName.Split('?');
                        String   program  = progargs[0];

                        if (progargs.Length < 2)
                        {
                            if (System.IO.File.Exists(program))
                            {
                                try
                                {
                                    System.Diagnostics.Process.Start(program);
                                }
                                catch (Exception pse)
                                {
                                    MessageBox.Show(pse.Message);
                                }
                            }
                            else
                            {
                                hi.setHint("文件“" + program + "”不存在!");
                                hi.Show();
                            }
                        }
                        else
                        {
                            if (System.IO.Directory.Exists(progargs[1].Trim()) || progargs[1].Contains(":"))
                            {
                                try
                                {
                                    System.Diagnostics.Process.Start(program, progargs[1].Trim());
                                }
                                catch (Exception pse)
                                {
                                    MessageBox.Show(pse.Message);
                                }
                            }
                            else
                            {
                                hi.setHint("路径" + progargs[1].Trim() + "不存在");
                                hi.Show();
                            }
                        }
                    }
                    else
                    {
                        return;
                    }
                }
            }
            //空格键抬起
            if (hookStruct.vkCode == (int)(Keys.Space) && hookStruct.flags == 128)
            {
                handle = false;
                delay.Stop();
                flag = false;
            }
        }