C#控制鼠标点击,移动,滑轮滚动

原创 2018年04月15日 23:41:57

   前不久无意中发现了一款手机上的软件,看新闻就可以得金币,通过金币可以换取RMB,怀着好奇,我下载了并且点击进去查看了,通过使用,发现这款软件获取金币的方法很简单,就是点击一篇新闻,进去后,隔一段时间滑动一下屏幕,大概20多秒就可以得到一次金币。当时我就在想有没有办法我自己写一个程序,模拟鼠标的点击,移动,滑轮滚动,然后把手机连接到电脑上,用电脑控制手机的屏幕(我是C#的,就只有这样转换了,要是Android的就直接写控制手机的了)。在上网查询了一些方法,结合自己写的。下面是鼠标点击,移动,滑轮滚动的方法。
 [DllImport("user32.dll")]
        static extern void mouse_event(int flags, int dX, int dY, int buttons, int extraInfo);

        const int MOUSEEVENTF_MOVE = 0x1;//模拟鼠标移动
        const int MOUSEEVENTF_LEFTDOWN = 0x2;//
        const int MOUSEEVENTF_LEFTUP = 0x4;
        const int MOUSEEVENTF_RIGHTDOWN = 0x8;
        const int MOUSEEVENTF_RIGHTUP = 0x10;
        const int MOUSEEVENTF_MIDDLEDOWN = 0x20;
        const int MOUSEEVENTF_MIDDLEUP = 0x40;
        const int MOUSEEVENTF_WHEEL = 0x800;
        const int MOUSEEVENTF_ABSOLUTE = 0x8000;
  //控制鼠标移动到坐标((int_X + 100) * 65536 / 1366, (int_Y + move_long) * 65536 / 768)这个绝对位置上。1366和768是电脑屏幕的分辨率,我的电脑是1366*768的分辨率
 //分辨率要根据自己的电脑设置正确,不然获取到的坐标不准确。
  mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, (int_X + 100) * 65536 / 1366, (int_Y + move_long) * 65536 / 768, 0, 0);
   

  //鼠标在原地左键点击一次(点下和松开)
   mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
 //控制鼠标滑轮滚动,count代表滚动的值,负数代表向下,正数代表向上,如-100代表向下滚动100的y坐标
  mouse_event(MOUSEEVENTF_WHEEL, 0, 0, count, 0);

下面是我写的这个软件的

全部代码:

public Form1()
        {
            InitializeComponent();
        }
        private  static int count = -100;//鼠标上下滚动的距离
        private int state = 1;//记录鼠标是向上还是向下滚动
        private int int_X;//鼠标点击的坐标的X
        private int int_Y;//鼠标点击的坐标的Y
        private int time=0;//记录执行的时间
        private int move_long = 0;
        private int settime = 0;
        private int clickCount = 5;
        private void Form1_Load(object sender, EventArgs e)
        {
            //每过100毫秒获取鼠标坐标,用于获取鼠标点击地方的坐标
            timer2.Enabled = true;
            timer2.Interval = 100;
           
        }

        [DllImport("user32.dll")]
        static extern void mouse_event(int flags, int dX, int dY, int buttons, int extraInfo);

        const int MOUSEEVENTF_MOVE = 0x1;//模拟鼠标移动
        const int MOUSEEVENTF_LEFTDOWN = 0x2;//
        const int MOUSEEVENTF_LEFTUP = 0x4;
        const int MOUSEEVENTF_RIGHTDOWN = 0x8;
        const int MOUSEEVENTF_RIGHTUP = 0x10;
        const int MOUSEEVENTF_MIDDLEDOWN = 0x20;
        const int MOUSEEVENTF_MIDDLEUP = 0x40;
        const int MOUSEEVENTF_WHEEL = 0x800;
        const int MOUSEEVENTF_ABSOLUTE = 0x8000;

         
     

        //模拟鼠标滑动事件
        private void timer1_Tick(object sender, EventArgs e)
        {
            time++;//事件执行次数
            clickCount++;
            txt_content.Text = clickCount.ToString();
            if (clickCount < 4)
            {
                //控制鼠标移动到坐标((int_X + 100) * 65536 / 1366, (int_Y + move_long) * 65536 / 768)这个绝对位置上。1366和768是电脑屏幕的分辨率,我的电脑是1366*768的分辨率
                //分辨率要根据自己的电脑设置正确,不然获取到的坐标不准确。
                mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, (int_X + 100) * 65536 / 1366, (int_Y + move_long) * 65536 / 768, 0, 0);
            }
            if (clickCount == 4)
            {
                //鼠标在原地左键点击一次(点下和松开)
                mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                time = 1;
                txt_content.Text = clickCount.ToString()+":点击事件";
                return;
            }
            if (time % (settime / 3) == 0)
            {
               

                mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, int_X * 65536 / 1366, (int_Y) * 65536 / 768, 0, 0);
                mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                clickCount = 0;
                time = 1;
                
            }
            else
            {
                if (state == 1)
                {
                    count = 100;//
                }
                else
                {
                    count = -100;//负数代表向下移动
                }
                //控制鼠标滑轮滚动,count代表滚动的值,负数代表向下,正数代表向上,如-100代表向下滚动100的y坐标
                mouse_event(MOUSEEVENTF_WHEEL, 0, 0, count, 0);
                if (state == 1)
                {
                    state = 0;
                }
                else
                {
                    state = 1;
                }

            }

        }

        private void btn_start_Click(object sender, EventArgs e)
        {
            timer2.Enabled = false;
            timer1.Enabled = true;
            move_long = int.Parse(txt_long.Text);
            settime = int.Parse(txt_time.Text);
            int_X =int.Parse(txt_X.Text);
            int_Y = int.Parse(txt_Y.Text);
            timer1.Interval = 3000;
        }

        //停止按钮
        private void btn_end_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
            timer1.Interval = 3000;
        }

        //获取鼠标的位置
        private void timer2_Tick(object sender, EventArgs e)
        {
            textBox1.Text= Cursor.Position.X.ToString();
            textBox2.Text = Cursor.Position.Y.ToString();
        }
记录下了第一次编写了一个可以为自己服务的一个小程序,感觉还是非常开心的。(刷金币的行为是不值得的,回报很少而且浪费精力。发表这篇博客只是为了和大家分享一些知识和我能够通过自己的写程序满足自己的想法的喜悦。)

软件测试问题汇总表

                        软件开发评测规范附录B《软件测试问题汇总表》(F02)《软件测试问题汇总表》月份:                                   ...
  • luhongjun
  • luhongjun
  • 2001-07-02 20:58:00
  • 940

C# panel控件实现鼠标滚轮滚动拖动滚动条

实验中panel名称为pnl_suggest 界面初始化时添加panel鼠标滚动相应: this.pnl_suggest.MouseWheel += new MouseEventHandl...
  • shenshendeai
  • shenshendeai
  • 2016-11-07 15:41:11
  • 2599

鼠标滑轮控制Div水平滚动

滑轮控制Div水平滚动
  • Qiustion
  • Qiustion
  • 2017-05-12 12:15:15
  • 1553

C# 如何用按钮实现鼠标滚轮操作

[DllImport("user32.dll")] static extern void mouse_event(int flags, int dX, int dY, int but...
  • jglie
  • jglie
  • 2011-10-14 09:32:47
  • 6926

如何屏蔽掉comboBox的鼠标滑轮

  class myCombo : ComboBox    {        protected override void WndProc(ref Message m)        {      ...
  • songkexin
  • songkexin
  • 2007-11-09 08:37:00
  • 2115

jQuery插件 拖拽和鼠标滚轮控制图片大小

  • 2014年07月26日 20:54
  • 229KB
  • 下载

解决Winform中鼠标滚轮无法操作Panel滚动条的问题

C# - 解决Winform中鼠标滚轮无法操作Panel滚动条的问题  收藏 北风其凉   发表于 1年前 阅读 1718 收藏 3 点赞 0 评论 0 ...
  • mosangbike
  • mosangbike
  • 2017-06-23 17:41:15
  • 1701

C# DateTimePicker鼠标滚动改变值

  • 2012年01月18日 21:53
  • 30KB
  • 下载

C#如何添加鼠标滚轮事件以及判断鼠标滚轮的方向

在控件中没有直接的鼠标滚轮事件,所以我们要手动添加鼠标滚轮事件。 下面以listview为例来说明 //添加鼠标滚轮事件 this.listView1.MouseWheel += n...
  • lc547913923
  • lc547913923
  • 2014-04-04 11:20:20
  • 4231

winForm ComBox禁用鼠标滚轮

public partial class Form1 : Form, IMessageFilter {     public Form1()     {         Ini...
  • onlyzkg
  • onlyzkg
  • 2014-07-28 15:42:45
  • 2015
收藏助手
不良信息举报
您举报文章:C#控制鼠标点击,移动,滑轮滚动
举报原因:
原因补充:

(最多只允许输入30个字)