分享一個小工具——我的鼠標自動點擊助手


今天整理電腦,看到這個小工具源碼,曾經是為了天貓點紅包而寫的。若是像今天這樣差點刪掉了多少有點可惜,雖然沒有技術含量,還是決定整理一下分享出來,為開源出一份綿薄之力。

1、工具界面介紹與項目文件介紹

小工具界面如下圖,需要說明有兩點:

1、延時是指當前操作后,休息多長時間執行下一個動作,不是多長時間后執行本動作。

2、Ctrl+S保存文件,必須保證當前焦點在左欄上(鼠標點擊一下左欄即可)。

項目文件如下,其中要說明的是MouseKeyboardActivityMonitor是一個C#實現的鼠標鍵盤勾子項目(項目地址:https://globalmousekeyhook.codeplex.com/),我本人對windows編程不太了解,勾子的含義與用處我也是網上查了查,半知半解!此處我主要是為了實現幾個全局的熱鍵(F7、F8、F9)而引入的這個項目。

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 中鼠標消息進行了簡單的封裝,可用來模擬鼠標的單雙擊。

3、總結與源碼

本人技術水平與表達能力有限,博文或技術上的不足之處還請大家指出!

源碼:MouseAutoClick.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM