今天整理电脑,看到这个小工具源码,曾经是为了天猫点红包而写的。若是像今天这样差点删掉了多少有点可惜,虽然没有技术含量,还是决定整理一下分享出来,为开源出一份绵薄之力。

1、工具界面介绍与项目文件介绍

小工具界面如下图,需要说明有两点:

1、延时是指当前操作后,休息多长时间执行下一个动作,不是多长时间后执行本动作。

2、Ctrl+S保存文件,必须保证当前焦点在左栏上(鼠标点击一下左栏即可)。

点击助手 ios 点击助手使用教程_点击助手 ios

项目文件如下,其中要说明的是MouseKeyboardActivityMonitor是一个C#实现的鼠标键盘勾子项目,我本人对windows编程不太了解,勾子的含义与用处我也是网上查了查,半知半解!此处我主要是为了实现几个全局的热键(F7、F8、F9)而引入的这个项目。

点击助手 ios 点击助手使用教程_Text_02

2、开发过程简单介绍

首先是拖出工具的界面,这个不说了。然后在界面加载后,需要注册一下鼠标键盘勾子(为了在鼠标键盘发生事件时,我能做一些事情)。以下代码在Form1的构造方法中:

//设置鼠标勾子
            mhl = new MouseHookListener(new MouseKeyboardActivityMonitor.WinApi.GlobalHooker());
            mhl.MouseMove += new MouseEventHandler(mhl_MouseMove);
            mhl.Enabled = true;

            //设置键盘勾子
            khl = new KeyboardHookListener(new MouseKeyboardActivityMonitor.WinApi.GlobalHooker());
            khl.KeyDown += new KeyEventHandler(khl_KeyDown);
            khl.Enabled = true;

可以看到我利用勾子来向系统注册了两个事件,一个是当鼠标移动时发生的事件,对应的事件处理逻辑就是将鼠标坐标显示到界面上;另一个是键盘有按键按下时发生的事件,事件处理逻辑是:按F7时,我纪录下当前的坐标信息与操作信息(鼠标:左/右单击、左/右双击,延时等);按F8时,交给工作线程去执行纪录下的鼠标命令;按F9时,停止执行。代码如下:

//界面上实时显示鼠标坐标
        void mhl_MouseMove(object sender, MouseEventArgs e)
        {
            txtX.Text = e.X.ToString();
            txtY.Text = e.Y.ToString();
        }

        //判断按键
        void khl_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F7)       //F7 设置坐标点
            {
                string action = string.Empty;

                if (rbtnLeftClick.Checked) action = rbtnLeftClick.Text;         //左单击
                else if (rbtnLeftDoubleClick.Checked) action = rbtnLeftDoubleClick.Text;   //左双击
                else if (rbtnRightClick.Checked) action = rbtnRightClick.Text;        //右单击
                else if (rbtnRightDoubleClick.Checked) action = rbtnRightDoubleClick.Text;  //右双击

                listBox1.Items.Add(string.Format("{0}|{1}|{2}|{3}", txtX.Text, txtY.Text, action, txtSleep.Text.Trim()));
            }
            else if (e.KeyCode == Keys.F8)  //F8 开始
            {
                if (listBox1.Items.Count == 0) return;

                AutoClickThread.ClickData = listBox1.Items.Cast<string>().ToList();
                AutoClickThread.Start(IsRecycleRun.Checked);
            }
            else if (e.KeyCode == Keys.F9)  //F9 停止
            {
                AutoClickThread.Stop();
            }
        }

另外在操作上为了不必每次都设置一遍鼠标命令,添加了读写配置到文本文件的功能。当焦点在左栏上时,Ctrl+S(这里可能要时间按长一点点)可保存配置,双击左栏可选择并打开一个配置。

鼠标自动点击命令的执行线程,依次加载执行配置好的鼠标命令,代码如下:

//执行
        static void Run(object isRecycleRun)
        {
            string[] stringArray;
            int x, y, sleepTime;

            do
            {
                foreach (string item in ClickData)
                {
                    if (cts.Token.IsCancellationRequested) return;

                    stringArray = item.Split('|');
                    x = int.Parse(stringArray[0]);
                    y = int.Parse(stringArray[1]);
                    sleepTime = int.Parse(stringArray[3]);

                    switch (stringArray[2])
                    {
                        case "左单击": MouseHelper.LeftButtonClick(x, y); break;
                        case "左双击": MouseHelper.LeftButtonDoubleClick(x, y); break;
                        case "右单击": MouseHelper.RightButtonClick(x, y); break;
                        case "右双击": MouseHelper.RightButtonDoubleClick(x, y); break;
                    }

                    Thread.Sleep(sleepTime);
                }
            }
            while ((bool)isRecycleRun);
        }

其中MouseHelper是对windows api 中鼠标消息进行了简单的封装,可用来模拟鼠标的单双击。